{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import time\n",
    "import sqlite3\n",
    "\n",
    "filename = './train_triplets.txt'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset = pd.read_table(filename,delimiter = '\\t',header = None,names = ['user','song','play_count'],nrows=1000000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1000000, 3)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1000000 entries, 0 to 999999\n",
      "Data columns (total 3 columns):\n",
      "user          1000000 non-null object\n",
      "song          1000000 non-null object\n",
      "play_count    1000000 non-null int64\n",
      "dtypes: int64(1), object(2)\n",
      "memory usage: 15.3+ MB\n"
     ]
    }
   ],
   "source": [
    "triplet_dataset.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAKIMP12A8C130995</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAPDEY12A81C210A9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBBMDR12A8C13253B</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBFNSP12AF72A0E22</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBFOVM12A58A7D494</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  play_count\n",
       "0  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAKIMP12A8C130995           1\n",
       "1  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAPDEY12A81C210A9           1\n",
       "2  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBBMDR12A8C13253B           2\n",
       "3  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBFNSP12AF72A0E22           1\n",
       "4  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBFOVM12A58A7D494           1"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset['play_count'] = triplet_dataset.play_count.astype('int32')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1000000 entries, 0 to 999999\n",
      "Data columns (total 3 columns):\n",
      "user          1000000 non-null object\n",
      "song          1000000 non-null object\n",
      "play_count    1000000 non-null int32\n",
      "dtypes: int32(1), object(2)\n",
      "memory usage: 11.4+ MB\n"
     ]
    }
   ],
   "source": [
    "triplet_dataset.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_counts = (triplet_dataset.groupby('user')['play_count'].sum().reset_index())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>00003a4459f33b92906be11abe0e93efc423c0ff</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0007c0e74728ca9ef0fe4eb7f75732e8026a278b</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>000b474f815bcff17a4bc9ce5324f9352dafe07d</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>000b4e4134d5f77d7608fbf86fb3e1adac4478a8</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>000d2df2cb8ad7300f89512f8fe8fadc4f99e733</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user  play_count\n",
       "0  00003a4459f33b92906be11abe0e93efc423c0ff          33\n",
       "1  0007c0e74728ca9ef0fe4eb7f75732e8026a278b          14\n",
       "2  000b474f815bcff17a4bc9ce5324f9352dafe07d          24\n",
       "3  000b4e4134d5f77d7608fbf86fb3e1adac4478a8          74\n",
       "4  000d2df2cb8ad7300f89512f8fe8fadc4f99e733          12"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_counts.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_user_counts = triplet_dataset_counts.sort_values(by = 'play_count',ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>8766</th>\n",
       "      <td>6ccd111af9b4baa497aacd6d1863cbf5a141acc6</td>\n",
       "      <td>3527</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2132</th>\n",
       "      <td>1aa4fd215aadb160965110ed8a829745cde319eb</td>\n",
       "      <td>3282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3202</th>\n",
       "      <td>283882c3d18ff2ad0e17124002ec02b847d06e9a</td>\n",
       "      <td>3055</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2728</th>\n",
       "      <td>2231cb435771a1a621ec44e95cdd28b81fad3288</td>\n",
       "      <td>2966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>0091e0326c4c034cc04be6454742912845740a1f</td>\n",
       "      <td>2750</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                          user  play_count\n",
       "8766  6ccd111af9b4baa497aacd6d1863cbf5a141acc6        3527\n",
       "2132  1aa4fd215aadb160965110ed8a829745cde319eb        3282\n",
       "3202  283882c3d18ff2ad0e17124002ec02b847d06e9a        3055\n",
       "2728  2231cb435771a1a621ec44e95cdd28b81fad3288        2966\n",
       "38    0091e0326c4c034cc04be6454742912845740a1f        2750"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_user_counts.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_user_counts.to_csv(path_or_buf='user_playcount_df1.csv',index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_counts = triplet_dataset.groupby('song')['play_count'].sum().reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_song_counts = triplet_dataset_counts.sort_values(by = 'play_count',ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_song_counts.to_csv(path_or_buf='song_playcount_df1.csv',index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6ccd111af9b4baa497aacd6d1863cbf5a141acc6</td>\n",
       "      <td>3527</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1aa4fd215aadb160965110ed8a829745cde319eb</td>\n",
       "      <td>3282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>283882c3d18ff2ad0e17124002ec02b847d06e9a</td>\n",
       "      <td>3055</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2231cb435771a1a621ec44e95cdd28b81fad3288</td>\n",
       "      <td>2966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0091e0326c4c034cc04be6454742912845740a1f</td>\n",
       "      <td>2750</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user  play_count\n",
       "0  6ccd111af9b4baa497aacd6d1863cbf5a141acc6        3527\n",
       "1  1aa4fd215aadb160965110ed8a829745cde319eb        3282\n",
       "2  283882c3d18ff2ad0e17124002ec02b847d06e9a        3055\n",
       "3  2231cb435771a1a621ec44e95cdd28b81fad3288        2966\n",
       "4  0091e0326c4c034cc04be6454742912845740a1f        2750"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "play_count_df = pd.read_csv(filepath_or_buffer='user_playcount_df1.csv')\n",
    "play_count_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song</th>\n",
       "      <th>play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>SOBONKR12A58A7A7E0</td>\n",
       "      <td>14763</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>SOAUWYT12A81C206F1</td>\n",
       "      <td>13005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>SOSXLTC12AF72A7F54</td>\n",
       "      <td>11605</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>SOFRQTD12A81C233C0</td>\n",
       "      <td>8284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>SOEGIYH12A6D4FC0E3</td>\n",
       "      <td>8067</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 song  play_count\n",
       "0  SOBONKR12A58A7A7E0       14763\n",
       "1  SOAUWYT12A81C206F1       13005\n",
       "2  SOSXLTC12AF72A7F54       11605\n",
       "3  SOFRQTD12A81C233C0        8284\n",
       "4  SOEGIYH12A6D4FC0E3        8067"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "song_count_df = pd.read_csv(filepath_or_buffer='song_playcount_df1.csv')\n",
    "song_count_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "85.8550534774\n"
     ]
    }
   ],
   "source": [
    "total_user_play_count = sum(play_count_df.play_count)\n",
    "print(float(play_count_df.head(n = 10000).play_count.sum())/total_user_play_count*100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "play_count_subset = play_count_df.head(n = 10000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74.6609151985\n"
     ]
    }
   ],
   "source": [
    "total_song_play_count = sum(song_count_df.play_count)\n",
    "print(float(song_count_df.head(n = 20000).play_count.sum())/total_song_play_count*100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "song_count_subset = song_count_df.head(n = 20000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "user_subset = list(play_count_subset.user)\n",
    "song_subset = list(song_count_subset.song)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_sub = triplet_dataset[triplet_dataset.user.isin(user_subset)]\n",
    "del(triplet_dataset)\n",
    "triplet_dataset_sub_song = triplet_dataset_sub[triplet_dataset_sub.song.isin(song_subset)]\n",
    "del(triplet_dataset_sub)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(498109, 3)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAKIMP12A8C130995</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAPDEY12A81C210A9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBBMDR12A8C13253B</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBFNSP12AF72A0E22</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBSUJE12A6D4F8CF5</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBXHDL12A81C204C0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBYHAJ12A6701BF1D</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SODACBL12A8C13C273</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SODDNQT12A6D4F5F7E</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SODXRTY12AB0180F3B</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        user                song  play_count\n",
       "0   b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAKIMP12A8C130995           1\n",
       "1   b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAPDEY12A81C210A9           1\n",
       "2   b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBBMDR12A8C13253B           2\n",
       "3   b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBFNSP12AF72A0E22           1\n",
       "6   b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBSUJE12A6D4F8CF5           2\n",
       "9   b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBXHDL12A81C204C0           1\n",
       "10  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBYHAJ12A6701BF1D           1\n",
       "12  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SODACBL12A8C13C273           1\n",
       "13  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SODDNQT12A6D4F5F7E           5\n",
       "14  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SODXRTY12AB0180F3B           1"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song.head(n=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 加入音乐的详细信息\n",
    "db文件需要转换成csv文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('songs',)]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "conn = sqlite3.connect('./track_metadata.db')\n",
    "cur = conn.cursor()\n",
    "cur.execute(\"SELECT name FROM sqlite_master WHERE type = 'table'\")\n",
    "cur.fetchall()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>track_id</th>\n",
       "      <th>title</th>\n",
       "      <th>song_id</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_id</th>\n",
       "      <th>artist_mbid</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>duration</th>\n",
       "      <th>artist_familiarity</th>\n",
       "      <th>artist_hotttnesss</th>\n",
       "      <th>year</th>\n",
       "      <th>track_7digitalid</th>\n",
       "      <th>shs_perf</th>\n",
       "      <th>shs_work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>TRMMMYQ128F932D901</td>\n",
       "      <td>Silent Night</td>\n",
       "      <td>SOQMMHC12AB0180CB8</td>\n",
       "      <td>Monster Ballads X-Mas</td>\n",
       "      <td>ARYZTJS1187B98C555</td>\n",
       "      <td>357ff05d-848a-44cf-b608-cb34b5701ae5</td>\n",
       "      <td>Faster Pussy cat</td>\n",
       "      <td>252.05506</td>\n",
       "      <td>0.649822</td>\n",
       "      <td>0.394032</td>\n",
       "      <td>2003</td>\n",
       "      <td>7032331</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>TRMMMKD128F425225D</td>\n",
       "      <td>Tanssi vaan</td>\n",
       "      <td>SOVFVAK12A8C1350D9</td>\n",
       "      <td>Karkuteillä</td>\n",
       "      <td>ARMVN3U1187FB3A1EB</td>\n",
       "      <td>8d7ef530-a6fd-4f8f-b2e2-74aec765e0f9</td>\n",
       "      <td>Karkkiautomaatti</td>\n",
       "      <td>156.55138</td>\n",
       "      <td>0.439604</td>\n",
       "      <td>0.356992</td>\n",
       "      <td>1995</td>\n",
       "      <td>1514808</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>TRMMMRX128F93187D9</td>\n",
       "      <td>No One Could Ever</td>\n",
       "      <td>SOGTUKN12AB017F4F1</td>\n",
       "      <td>Butter</td>\n",
       "      <td>ARGEKB01187FB50750</td>\n",
       "      <td>3d403d44-36ce-465c-ad43-ae877e65adc4</td>\n",
       "      <td>Hudson Mohawke</td>\n",
       "      <td>138.97098</td>\n",
       "      <td>0.643681</td>\n",
       "      <td>0.437504</td>\n",
       "      <td>2006</td>\n",
       "      <td>6945353</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>TRMMMCH128F425532C</td>\n",
       "      <td>Si Vos Querés</td>\n",
       "      <td>SOBNYVR12A8C13558C</td>\n",
       "      <td>De Culo</td>\n",
       "      <td>ARNWYLR1187B9B2F9C</td>\n",
       "      <td>12be7648-7094-495f-90e6-df4189d68615</td>\n",
       "      <td>Yerba Brava</td>\n",
       "      <td>145.05751</td>\n",
       "      <td>0.448501</td>\n",
       "      <td>0.372349</td>\n",
       "      <td>2003</td>\n",
       "      <td>2168257</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>TRMMMWA128F426B589</td>\n",
       "      <td>Tangle Of Aspens</td>\n",
       "      <td>SOHSBXH12A8C13B0DF</td>\n",
       "      <td>Rene Ablaze Presents Winter Sessions</td>\n",
       "      <td>AREQDTE1269FB37231</td>\n",
       "      <td></td>\n",
       "      <td>Der Mystic</td>\n",
       "      <td>514.29832</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>2264873</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>TRMMMXN128F42936A5</td>\n",
       "      <td>Symphony No. 1 G minor \"Sinfonie Serieuse\"/All...</td>\n",
       "      <td>SOZVAPQ12A8C13B63C</td>\n",
       "      <td>Berwald: Symphonies Nos. 1/2/3/4</td>\n",
       "      <td>AR2NS5Y1187FB5879D</td>\n",
       "      <td>d087b377-bab7-46c4-bd12-15debebb5d61</td>\n",
       "      <td>David Montgomery</td>\n",
       "      <td>816.53506</td>\n",
       "      <td>0.361287</td>\n",
       "      <td>0.109626</td>\n",
       "      <td>0</td>\n",
       "      <td>3360982</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>TRMMMLR128F1494097</td>\n",
       "      <td>We Have Got Love</td>\n",
       "      <td>SOQVRHI12A6D4FB2D7</td>\n",
       "      <td>Strictly The Best Vol. 34</td>\n",
       "      <td>ARO41T51187FB397AB</td>\n",
       "      <td>d2461c0a-5575-4425-a225-fce0180de3fd</td>\n",
       "      <td>Sasha / Turbulence</td>\n",
       "      <td>212.37506</td>\n",
       "      <td>0.692923</td>\n",
       "      <td>0.453732</td>\n",
       "      <td>0</td>\n",
       "      <td>552626</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>TRMMMBB12903CB7D21</td>\n",
       "      <td>2 Da Beat Ch'yall</td>\n",
       "      <td>SOEYRFT12AB018936C</td>\n",
       "      <td>Da Bomb</td>\n",
       "      <td>AR3Z9WY1187FB4CDC2</td>\n",
       "      <td>bf61e8ff-7621-4655-8ebd-68210645c5e9</td>\n",
       "      <td>Kris Kross</td>\n",
       "      <td>221.20444</td>\n",
       "      <td>0.588156</td>\n",
       "      <td>0.401092</td>\n",
       "      <td>1993</td>\n",
       "      <td>6435649</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>TRMMMHY12903CB53F1</td>\n",
       "      <td>Goodbye</td>\n",
       "      <td>SOPMIYT12A6D4F851E</td>\n",
       "      <td>Danny Boy</td>\n",
       "      <td>ARA04401187B991E6E</td>\n",
       "      <td>1a9bf859-1dc2-495b-9e7c-289be7731a9f</td>\n",
       "      <td>Joseph Locke</td>\n",
       "      <td>139.17995</td>\n",
       "      <td>0.408465</td>\n",
       "      <td>0.285901</td>\n",
       "      <td>0</td>\n",
       "      <td>8376489</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>TRMMMML128F4280EE9</td>\n",
       "      <td>Mama_ mama can't you see ?</td>\n",
       "      <td>SOJCFMH12A8C13B0C2</td>\n",
       "      <td>March to cadence with the US marines</td>\n",
       "      <td>ARCVMYS12454A51E6E</td>\n",
       "      <td></td>\n",
       "      <td>The Sun Harbor's Chorus-Documentary Recordings</td>\n",
       "      <td>104.48934</td>\n",
       "      <td>0.419941</td>\n",
       "      <td>0.249137</td>\n",
       "      <td>0</td>\n",
       "      <td>1043208</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>TRMMMNS128F93548E1</td>\n",
       "      <td>L'antarctique</td>\n",
       "      <td>SOYGNWH12AB018191E</td>\n",
       "      <td>Des cobras des tarentules</td>\n",
       "      <td>AR59BSJ1187FB4474F</td>\n",
       "      <td>891fccfc-24c1-4bfd-bf49-c736e59e443f</td>\n",
       "      <td>3 Gars Su'l Sofa</td>\n",
       "      <td>68.96281</td>\n",
       "      <td>0.555014</td>\n",
       "      <td>0.352949</td>\n",
       "      <td>2007</td>\n",
       "      <td>7192392</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>TRMMMXJ12903CBF111</td>\n",
       "      <td>El hijo del pueblo</td>\n",
       "      <td>SOLJTLX12AB01890ED</td>\n",
       "      <td>32 Grandes Éxitos  CD 2</td>\n",
       "      <td>ARCVIFR1187B99129F</td>\n",
       "      <td>ec57c22f-9bb7-48ab-aa85-dab108a71b53</td>\n",
       "      <td>Jorge Negrete</td>\n",
       "      <td>168.22812</td>\n",
       "      <td>0.541390</td>\n",
       "      <td>0.369096</td>\n",
       "      <td>1997</td>\n",
       "      <td>7928975</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>TRMMMCJ128F930BFF8</td>\n",
       "      <td>Cold Beer feat. Prince Metropolitan</td>\n",
       "      <td>SOQQESG12A58A7AA28</td>\n",
       "      <td>International Hardcore Superstar</td>\n",
       "      <td>ARVIT0V1187B9A7CDE</td>\n",
       "      <td>2eb02f8c-8dfa-49dc-a224-11051ec45a42</td>\n",
       "      <td>Danny Diablo</td>\n",
       "      <td>301.60934</td>\n",
       "      <td>0.622005</td>\n",
       "      <td>0.451579</td>\n",
       "      <td>0</td>\n",
       "      <td>6893903</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>TRMMMBW128F4260CAE</td>\n",
       "      <td>Pilots</td>\n",
       "      <td>SOMPVQB12A8C1379BB</td>\n",
       "      <td>The Loyal</td>\n",
       "      <td>AREMPER1187B9AEB42</td>\n",
       "      <td>14efbb08-c3d8-404c-9ead-ad71fa586ee6</td>\n",
       "      <td>Tiger Lou</td>\n",
       "      <td>318.45832</td>\n",
       "      <td>0.621826</td>\n",
       "      <td>0.406985</td>\n",
       "      <td>2005</td>\n",
       "      <td>2218694</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>TRMMMXI128F4285A3F</td>\n",
       "      <td>N Gana</td>\n",
       "      <td>SOGPCJI12A8C13CCA0</td>\n",
       "      <td>Afropea 3 - Telling Stories To The Sea</td>\n",
       "      <td>ARBAMQB1187FB3C650</td>\n",
       "      <td>0bb5e108-b41d-46cd-969e-69d34d1acdfe</td>\n",
       "      <td>Waldemar Bastos</td>\n",
       "      <td>273.18812</td>\n",
       "      <td>0.543690</td>\n",
       "      <td>0.373679</td>\n",
       "      <td>0</td>\n",
       "      <td>2387740</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>TRMMMKI128F931D80D</td>\n",
       "      <td>006</td>\n",
       "      <td>SOSDCFG12AB0184647</td>\n",
       "      <td>Lena 20 År</td>\n",
       "      <td>ARSB5591187B99A848</td>\n",
       "      <td>fba3e876-68f1-4a1f-99d9-c604480202ba</td>\n",
       "      <td>Lena Philipsson</td>\n",
       "      <td>262.26893</td>\n",
       "      <td>0.529819</td>\n",
       "      <td>0.410229</td>\n",
       "      <td>1998</td>\n",
       "      <td>6010886</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>TRMMMUT128F42646E8</td>\n",
       "      <td>(Looking For) The Heart Of Saturday</td>\n",
       "      <td>SOBARPM12A8C133DFF</td>\n",
       "      <td>Cover Girl</td>\n",
       "      <td>ARDW5AW1187FB55708</td>\n",
       "      <td>42222090-c5e5-4243-8582-c29bc8b63ec6</td>\n",
       "      <td>Shawn Colvin</td>\n",
       "      <td>216.47628</td>\n",
       "      <td>0.685503</td>\n",
       "      <td>0.446733</td>\n",
       "      <td>1994</td>\n",
       "      <td>3156269</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>TRMMMQY128F92F0EA3</td>\n",
       "      <td>Ethos of Coercion</td>\n",
       "      <td>SOKOVRQ12A8C142811</td>\n",
       "      <td>Descend Into Depravity</td>\n",
       "      <td>ARGWPP11187B9AEF43</td>\n",
       "      <td>f76167bb-c117-4022-8b6b-54c796edf5c9</td>\n",
       "      <td>Dying Fetus</td>\n",
       "      <td>196.02240</td>\n",
       "      <td>0.734471</td>\n",
       "      <td>0.511976</td>\n",
       "      <td>2009</td>\n",
       "      <td>6782293</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>TRMMMTK128F424EF7C</td>\n",
       "      <td>Rock-N-Rule</td>\n",
       "      <td>SOIMMJJ12AF72AD643</td>\n",
       "      <td>I'm Only A Man (Bonus Track Version)</td>\n",
       "      <td>ARDT9VH1187B999C0B</td>\n",
       "      <td>6b22de04-fb48-44aa-bd02-c1427f635477</td>\n",
       "      <td>Emery</td>\n",
       "      <td>217.57342</td>\n",
       "      <td>0.738996</td>\n",
       "      <td>0.563367</td>\n",
       "      <td>2007</td>\n",
       "      <td>1501464</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>TRMMMHQ128F4278194</td>\n",
       "      <td>La bola extra</td>\n",
       "      <td>SOVMBTP12A8C13A8F6</td>\n",
       "      <td>La bola extra</td>\n",
       "      <td>ARWFDED1187B9B9D71</td>\n",
       "      <td>8ff7e1b4-18f8-48ec-a8a0-793ab1a5511c</td>\n",
       "      <td>Los Ronaldos</td>\n",
       "      <td>355.60444</td>\n",
       "      <td>0.467145</td>\n",
       "      <td>0.409127</td>\n",
       "      <td>0</td>\n",
       "      <td>2318206</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>TRMMMQV12903CA201E</td>\n",
       "      <td>I Made It Over</td>\n",
       "      <td>SOOUESZ12AB0189AFD</td>\n",
       "      <td>Let's Celebrate (He Is Risen)</td>\n",
       "      <td>ARVF2AD1187FB47580</td>\n",
       "      <td>fd711779-5524-4ed3-8d68-da0b867caa34</td>\n",
       "      <td>Rev. Timothy Wright</td>\n",
       "      <td>353.77587</td>\n",
       "      <td>0.377190</td>\n",
       "      <td>0.290242</td>\n",
       "      <td>0</td>\n",
       "      <td>6345139</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>TRMMMMV128F14746A5</td>\n",
       "      <td>Debussy : 12 Etudes : VI Pour les huit doigts</td>\n",
       "      <td>SOAGMGG12A6D4F9099</td>\n",
       "      <td>Debussy : 12 Etudes_ Images Sets 1 &amp; 2</td>\n",
       "      <td>AR0GK7N1187B9AC56C</td>\n",
       "      <td>bfc4370b-c0d9-46c7-825b-bf09f9b65264</td>\n",
       "      <td>Pierre-Laurent Aimard</td>\n",
       "      <td>93.12608</td>\n",
       "      <td>0.413739</td>\n",
       "      <td>0.383463</td>\n",
       "      <td>0</td>\n",
       "      <td>373519</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>TRMMMPN128F426610E</td>\n",
       "      <td>Nervous</td>\n",
       "      <td>SOGFWVT12A8C137C64</td>\n",
       "      <td>Let No One Live Rent Free In Your Head</td>\n",
       "      <td>AR66C9X1187B98F7EA</td>\n",
       "      <td>b9313805-5fe0-4f1b-9f5c-9e52565a5a3d</td>\n",
       "      <td>Nicolette</td>\n",
       "      <td>213.47220</td>\n",
       "      <td>0.593554</td>\n",
       "      <td>0.297176</td>\n",
       "      <td>1996</td>\n",
       "      <td>2242562</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>TRMMMNO128F93539AA</td>\n",
       "      <td>In The Journey</td>\n",
       "      <td>SOKLPMH12AB01861FA</td>\n",
       "      <td>In The Journey</td>\n",
       "      <td>AR4TLW81187B99683D</td>\n",
       "      <td>0685ac4a-5cfc-408a-b391-903ea20e00bf</td>\n",
       "      <td>Martin Sexton</td>\n",
       "      <td>319.81669</td>\n",
       "      <td>0.641198</td>\n",
       "      <td>0.448653</td>\n",
       "      <td>2001</td>\n",
       "      <td>5749967</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>TRMMMTG128F426B5BB</td>\n",
       "      <td>Fuckin Ethic People (999)</td>\n",
       "      <td>SOEPAIN12A8C1396A7</td>\n",
       "      <td>Crazeë Musick</td>\n",
       "      <td>ARDPJYJ11F4C83E24A</td>\n",
       "      <td></td>\n",
       "      <td>Craze</td>\n",
       "      <td>204.19873</td>\n",
       "      <td>0.559135</td>\n",
       "      <td>0.404594</td>\n",
       "      <td>0</td>\n",
       "      <td>2851707</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>TRMMMPJ128F9306985</td>\n",
       "      <td>Tu Vida Con La Mía</td>\n",
       "      <td>SOQMZZI12AB01850D4</td>\n",
       "      <td>Hoy Quiero Soñar</td>\n",
       "      <td>ARBE9HD1187FB40016</td>\n",
       "      <td>8cc00e45-94c9-40e0-882b-0e76dd5b472b</td>\n",
       "      <td>Christian Castro</td>\n",
       "      <td>258.89914</td>\n",
       "      <td>0.583717</td>\n",
       "      <td>0.396613</td>\n",
       "      <td>0</td>\n",
       "      <td>4970915</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>TRMMMRZ128F4265EB4</td>\n",
       "      <td>I'm Ready</td>\n",
       "      <td>SOEEHEY12CF5F88FB4</td>\n",
       "      <td>Honkin' On Bobo</td>\n",
       "      <td>AR12F2S1187FB56EEF</td>\n",
       "      <td>3d2b98e5-556f-4451-a3ff-c50ea18d57cb</td>\n",
       "      <td>Aerosmith</td>\n",
       "      <td>253.70077</td>\n",
       "      <td>0.853383</td>\n",
       "      <td>0.610432</td>\n",
       "      <td>2004</td>\n",
       "      <td>3162359</td>\n",
       "      <td>26760</td>\n",
       "      <td>10040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>TRMMMKD12903CF219E</td>\n",
       "      <td>Take As Needed</td>\n",
       "      <td>SOWUMAZ12A67ADE769</td>\n",
       "      <td>Nerve Damage</td>\n",
       "      <td>AREH0O41187FB4C405</td>\n",
       "      <td>83e32d32-fee5-45de-a4b6-b49956a069eb</td>\n",
       "      <td>Skinlab</td>\n",
       "      <td>210.93832</td>\n",
       "      <td>0.729867</td>\n",
       "      <td>0.417882</td>\n",
       "      <td>2002</td>\n",
       "      <td>8138503</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>TRMMMRR12903CF395D</td>\n",
       "      <td>Autumn In The Mind (Acoustic Version)</td>\n",
       "      <td>SOJJAZT12AC4687219</td>\n",
       "      <td>Lo Fi_ Acoustic Excursions</td>\n",
       "      <td>ARN5X9D1187B998A6D</td>\n",
       "      <td>2f338a80-cae4-40e8-a0f7-9b5468479e3a</td>\n",
       "      <td>Mike Badger and Friends</td>\n",
       "      <td>180.55791</td>\n",
       "      <td>0.430914</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>7656579</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>TRMMMJW12903CF239E</td>\n",
       "      <td>Tequila</td>\n",
       "      <td>SOMLHJQ12AC4685B45</td>\n",
       "      <td>Tequila il mambo del giubileo (12 Inc)</td>\n",
       "      <td>AR52DCD1187B992B5F</td>\n",
       "      <td>80d946ff-0567-4882-ad91-77c5d47448b8</td>\n",
       "      <td>Piotta</td>\n",
       "      <td>216.03220</td>\n",
       "      <td>0.542922</td>\n",
       "      <td>0.411241</td>\n",
       "      <td>0</td>\n",
       "      <td>8626743</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999970</th>\n",
       "      <td>TRYYYOM12903CEAAE5</td>\n",
       "      <td>21st century Schizoid Man</td>\n",
       "      <td>SONODQO12AB018DB65</td>\n",
       "      <td>Live in London 2008</td>\n",
       "      <td>ARG6UOX1187B9922D8</td>\n",
       "      <td>15145488-7bed-4f88-96d1-9408a04345d8</td>\n",
       "      <td>Nash The Slash</td>\n",
       "      <td>302.91546</td>\n",
       "      <td>0.492079</td>\n",
       "      <td>0.321454</td>\n",
       "      <td>2008</td>\n",
       "      <td>9071268</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999971</th>\n",
       "      <td>TRYYYCS128F930C271</td>\n",
       "      <td>Your Lingering Touch</td>\n",
       "      <td>SOQVXTX12AB017F110</td>\n",
       "      <td>Your Lingering Touch</td>\n",
       "      <td>ARYT62X1187FB5962F</td>\n",
       "      <td>98261682-3a40-47d8-8b2e-12866ace3120</td>\n",
       "      <td>Govi</td>\n",
       "      <td>264.61995</td>\n",
       "      <td>0.579400</td>\n",
       "      <td>0.392385</td>\n",
       "      <td>1997</td>\n",
       "      <td>5938495</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999972</th>\n",
       "      <td>TRYYYJZ128F424BFA1</td>\n",
       "      <td>Deliverance</td>\n",
       "      <td>SOJYTFC12A6D4FD812</td>\n",
       "      <td>Rock Love</td>\n",
       "      <td>ARNLVQB1187B9AEAB0</td>\n",
       "      <td>e57f0cac-4f56-473c-8d7e-d93f753fd586</td>\n",
       "      <td>Steve Miller Band</td>\n",
       "      <td>561.18812</td>\n",
       "      <td>0.771815</td>\n",
       "      <td>0.547589</td>\n",
       "      <td>1971</td>\n",
       "      <td>3037984</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999973</th>\n",
       "      <td>TRYYYWE12903CE4FF9</td>\n",
       "      <td>Parkhaus</td>\n",
       "      <td>SOIQVTG12AC468E9C0</td>\n",
       "      <td>Inselwissen</td>\n",
       "      <td>AR0KEBK11C8A421F77</td>\n",
       "      <td>a8236a47-f643-409a-946b-d0c0b6d5c115</td>\n",
       "      <td>Captain Planet</td>\n",
       "      <td>195.97016</td>\n",
       "      <td>0.544325</td>\n",
       "      <td>0.468412</td>\n",
       "      <td>2009</td>\n",
       "      <td>6622577</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999974</th>\n",
       "      <td>TRYYYDX128EF34FF8A</td>\n",
       "      <td>Ghost Audio</td>\n",
       "      <td>SOTPCUY12A6D223AE7</td>\n",
       "      <td>Noise Brulée</td>\n",
       "      <td>ARMTQWT12454A422D5</td>\n",
       "      <td></td>\n",
       "      <td>Lenny Dee &amp; Radium</td>\n",
       "      <td>299.28444</td>\n",
       "      <td>0.419483</td>\n",
       "      <td>0.280224</td>\n",
       "      <td>0</td>\n",
       "      <td>780870</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999975</th>\n",
       "      <td>TRYYYPK128F934115F</td>\n",
       "      <td>Water Works</td>\n",
       "      <td>SOZGIHP12A58A7BA4F</td>\n",
       "      <td>Little D</td>\n",
       "      <td>ARTEGNK1187FB554BC</td>\n",
       "      <td>d09ef6e9-321b-4715-9a93-b7392032f8be</td>\n",
       "      <td>Fishboy</td>\n",
       "      <td>96.10404</td>\n",
       "      <td>0.565545</td>\n",
       "      <td>0.355600</td>\n",
       "      <td>0</td>\n",
       "      <td>5222979</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999976</th>\n",
       "      <td>TRYYYVI12903CAEDF6</td>\n",
       "      <td>Six</td>\n",
       "      <td>SOCGVWG12A8C135685</td>\n",
       "      <td>Six</td>\n",
       "      <td>ARRHVVL1187B991E41</td>\n",
       "      <td>8ca2e10a-7a93-4065-aa77-8f277bfb1c84</td>\n",
       "      <td>Hi-Tack</td>\n",
       "      <td>163.31710</td>\n",
       "      <td>0.494902</td>\n",
       "      <td>0.334144</td>\n",
       "      <td>0</td>\n",
       "      <td>7373757</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999977</th>\n",
       "      <td>TRYYYLV128F14AFD76</td>\n",
       "      <td>Reflectuum</td>\n",
       "      <td>SOYCIHR12A6D4FBC6A</td>\n",
       "      <td>Eve Future</td>\n",
       "      <td>ARI9UV41187B98AB58</td>\n",
       "      <td>05498d7c-5bd0-40fa-aabf-a39f34efba5c</td>\n",
       "      <td>Kreidler</td>\n",
       "      <td>218.56608</td>\n",
       "      <td>0.496291</td>\n",
       "      <td>0.338061</td>\n",
       "      <td>2002</td>\n",
       "      <td>679004</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999978</th>\n",
       "      <td>TRYYYWR128F4267C95</td>\n",
       "      <td>Judith (Renholder Remix) (Explicit)</td>\n",
       "      <td>SOQHTGU12A8C136FA8</td>\n",
       "      <td>aMOTION</td>\n",
       "      <td>ARVDO8G1187B99F43E</td>\n",
       "      <td>078a9376-3c04-4280-b7d7-b20e158f345d</td>\n",
       "      <td>A Perfect Circle</td>\n",
       "      <td>264.95955</td>\n",
       "      <td>0.762362</td>\n",
       "      <td>0.597867</td>\n",
       "      <td>0</td>\n",
       "      <td>1608280</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999979</th>\n",
       "      <td>TRYYYFV128F4277D53</td>\n",
       "      <td>Too Much Fun</td>\n",
       "      <td>SOHYZUP12B0B8064C3</td>\n",
       "      <td>The Fashion Focus</td>\n",
       "      <td>ARH65291187B989DB5</td>\n",
       "      <td>250c38d6-0353-4c22-a371-f305d908573c</td>\n",
       "      <td>Starflyer 59</td>\n",
       "      <td>462.26240</td>\n",
       "      <td>0.657696</td>\n",
       "      <td>0.537043</td>\n",
       "      <td>1998</td>\n",
       "      <td>1674434</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999980</th>\n",
       "      <td>TRYYYWS128EF34A1FF</td>\n",
       "      <td>Think Of Me As Your Soldier</td>\n",
       "      <td>SOELYAZ12A6BD4E103</td>\n",
       "      <td>Where I'm Coming From</td>\n",
       "      <td>ARUM60L1187B9A7E1F</td>\n",
       "      <td>1ee18fb3-18a6-4c7f-8ba0-bc41cdd0462e</td>\n",
       "      <td>Stevie Wonder</td>\n",
       "      <td>219.14077</td>\n",
       "      <td>0.757921</td>\n",
       "      <td>0.600265</td>\n",
       "      <td>1971</td>\n",
       "      <td>751885</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999981</th>\n",
       "      <td>TRYYYBR128F9322E4D</td>\n",
       "      <td>Daramad</td>\n",
       "      <td>SORDTRE12AB017E986</td>\n",
       "      <td>Shajarian Golden Songs - Persian Music</td>\n",
       "      <td>ARFCWGU11F50C5117F</td>\n",
       "      <td></td>\n",
       "      <td>Mohammad Reza Shajarian</td>\n",
       "      <td>319.63383</td>\n",
       "      <td>0.432962</td>\n",
       "      <td>0.365638</td>\n",
       "      <td>0</td>\n",
       "      <td>5547426</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999982</th>\n",
       "      <td>TRYYYRP128F429F636</td>\n",
       "      <td>Troubled 'Bout My Soul</td>\n",
       "      <td>SOOUXVD12A8C142677</td>\n",
       "      <td>Jaybird Coleman &amp; The Birmingham Jug Band (192...</td>\n",
       "      <td>AR7LMZA1187B98CEA4</td>\n",
       "      <td>8f934d34-175f-4b70-8cf4-c3eb6682e818</td>\n",
       "      <td>Jaybird Coleman &amp; Birmingham Jug Band</td>\n",
       "      <td>175.35955</td>\n",
       "      <td>0.398604</td>\n",
       "      <td>0.291375</td>\n",
       "      <td>0</td>\n",
       "      <td>1872060</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999983</th>\n",
       "      <td>TRYYYUP128F933063B</td>\n",
       "      <td>A Love Of Home</td>\n",
       "      <td>SOVPZKZ12AB01845DE</td>\n",
       "      <td>Laughter At Dawn</td>\n",
       "      <td>ARWGIOC1187FB4CBEF</td>\n",
       "      <td>7d4624c6-5e71-49f9-a3aa-fc9951953cbb</td>\n",
       "      <td>Jim Chappell</td>\n",
       "      <td>231.96689</td>\n",
       "      <td>0.520205</td>\n",
       "      <td>0.361510</td>\n",
       "      <td>0</td>\n",
       "      <td>5603681</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999984</th>\n",
       "      <td>TRYYYOU128F426B209</td>\n",
       "      <td>Interrotte Speranze</td>\n",
       "      <td>SOIQNVK12A8C13B061</td>\n",
       "      <td>Lux Noctis</td>\n",
       "      <td>ARHHIW21187FB5BD76</td>\n",
       "      <td>92ff6a4e-7070-4ddc-a62f-da9833aa236a</td>\n",
       "      <td>Coronatus</td>\n",
       "      <td>88.45016</td>\n",
       "      <td>0.560206</td>\n",
       "      <td>0.376075</td>\n",
       "      <td>2007</td>\n",
       "      <td>2263977</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999985</th>\n",
       "      <td>TRYYYYM12903CAD996</td>\n",
       "      <td>As You Are</td>\n",
       "      <td>SOZQSBC12AB018A833</td>\n",
       "      <td>As You Are</td>\n",
       "      <td>AR3UUTN1187FB5AF47</td>\n",
       "      <td>6432a8de-1461-4217-909f-d956f21c83d7</td>\n",
       "      <td>Neal Scarborough &amp; Gary Maguire</td>\n",
       "      <td>513.20118</td>\n",
       "      <td>0.494158</td>\n",
       "      <td>0.362108</td>\n",
       "      <td>0</td>\n",
       "      <td>7368508</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999986</th>\n",
       "      <td>TRYYYDS128F422DC77</td>\n",
       "      <td>Gazm Or Gasm</td>\n",
       "      <td>SOOZJQN12A81C1FDD0</td>\n",
       "      <td>Panoramic</td>\n",
       "      <td>AR2328I1187B99D7AD</td>\n",
       "      <td>a951a227-21ca-4fe4-a0d7-9d98fd6cb18e</td>\n",
       "      <td>Sinner Dc</td>\n",
       "      <td>153.23383</td>\n",
       "      <td>0.510366</td>\n",
       "      <td>0.409529</td>\n",
       "      <td>0</td>\n",
       "      <td>1950431</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999987</th>\n",
       "      <td>TRYYYVJ128F4258203</td>\n",
       "      <td>Ether</td>\n",
       "      <td>SOMDVLO12A58A7A02B</td>\n",
       "      <td>0</td>\n",
       "      <td>AR9ZEEW1187B9B0666</td>\n",
       "      <td>2a6f9aed-dc6f-4bfb-a9a4-be7078f71ed0</td>\n",
       "      <td>Transmission0</td>\n",
       "      <td>228.20526</td>\n",
       "      <td>0.497783</td>\n",
       "      <td>0.381368</td>\n",
       "      <td>2004</td>\n",
       "      <td>2180621</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999988</th>\n",
       "      <td>TRYYYWX128F92E11D1</td>\n",
       "      <td>Wouldn't Get Far</td>\n",
       "      <td>SOYKHSL12AF72A35AC</td>\n",
       "      <td>Wouldn't Get Far</td>\n",
       "      <td>ARPBTRI1187FB52457</td>\n",
       "      <td>baec7ed1-32d7-482d-9455-33c403e61952</td>\n",
       "      <td>The Game</td>\n",
       "      <td>251.01016</td>\n",
       "      <td>0.927986</td>\n",
       "      <td>0.599860</td>\n",
       "      <td>0</td>\n",
       "      <td>5761158</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999989</th>\n",
       "      <td>TRYYYHG128F9343EFB</td>\n",
       "      <td>Chill</td>\n",
       "      <td>SOIDAMG12AB0182B3A</td>\n",
       "      <td>Oxygen Refreshed (Instrumentals)</td>\n",
       "      <td>ARKUAXS11F4C841DEB</td>\n",
       "      <td>a6cf94d3-a1ff-4191-87cb-688b4f6a3890</td>\n",
       "      <td>Jazz Addixx</td>\n",
       "      <td>245.91628</td>\n",
       "      <td>0.481678</td>\n",
       "      <td>0.328194</td>\n",
       "      <td>0</td>\n",
       "      <td>5234679</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999990</th>\n",
       "      <td>TRYYYYS12903D0605A</td>\n",
       "      <td>Way Down</td>\n",
       "      <td>SOFAXZU12AB01881C4</td>\n",
       "      <td>Way Down</td>\n",
       "      <td>ARL73HN1187B993D29</td>\n",
       "      <td>397cd952-ae9c-40cb-a504-fd0ef47ec120</td>\n",
       "      <td>Taylor Hawkins &amp; The Coattail Riders</td>\n",
       "      <td>228.41424</td>\n",
       "      <td>0.735147</td>\n",
       "      <td>0.471100</td>\n",
       "      <td>2010</td>\n",
       "      <td>8707936</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999991</th>\n",
       "      <td>TRYYYLF128E0789A44</td>\n",
       "      <td>So Many People</td>\n",
       "      <td>SOYFFWW12A6701C135</td>\n",
       "      <td>Four</td>\n",
       "      <td>ARCFNAM1187B99424A</td>\n",
       "      <td>f304492a-0318-4806-b5f6-dd69dc020460</td>\n",
       "      <td>Bah Samba</td>\n",
       "      <td>258.76853</td>\n",
       "      <td>0.586555</td>\n",
       "      <td>0.340153</td>\n",
       "      <td>2002</td>\n",
       "      <td>117121</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999992</th>\n",
       "      <td>TRYYYZM128F428E804</td>\n",
       "      <td>Inequality Street</td>\n",
       "      <td>SOBODSE12A8C13EBD6</td>\n",
       "      <td>No Daylights_ Nor Heeltaps</td>\n",
       "      <td>AR1I9KS1187B9AEFD4</td>\n",
       "      <td>8fe90664-ee90-4b18-b4e9-9b7cf02807bd</td>\n",
       "      <td>SKYCLAD</td>\n",
       "      <td>241.21424</td>\n",
       "      <td>0.592700</td>\n",
       "      <td>0.429545</td>\n",
       "      <td>1996</td>\n",
       "      <td>1769789</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999993</th>\n",
       "      <td>TRYYYON128F932585A</td>\n",
       "      <td>Taurus (Keenhouse Remix)</td>\n",
       "      <td>SOWCNSN12AB018070F</td>\n",
       "      <td>Taurus</td>\n",
       "      <td>ARWHGZD122BCFCC06A</td>\n",
       "      <td>fa50592e-ae8d-4f68-9c4d-3acdeb035227</td>\n",
       "      <td>Loose Shus</td>\n",
       "      <td>295.88853</td>\n",
       "      <td>0.517673</td>\n",
       "      <td>0.360972</td>\n",
       "      <td>0</td>\n",
       "      <td>5558247</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999994</th>\n",
       "      <td>TRYYYNQ128F92E0292</td>\n",
       "      <td>Down Fo' The Kick Doe</td>\n",
       "      <td>SOVRJOO12A8C143C7A</td>\n",
       "      <td>Messy Marv Presents: Draped Up and Chipped Out...</td>\n",
       "      <td>AR5R6781187B98BE78</td>\n",
       "      <td>47864525-aea7-439a-800f-17c57e51cbcc</td>\n",
       "      <td>Killer Mike feat. Gangsta Pill and Nario of Gr...</td>\n",
       "      <td>185.33832</td>\n",
       "      <td>0.699599</td>\n",
       "      <td>0.392061</td>\n",
       "      <td>0</td>\n",
       "      <td>4809599</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999995</th>\n",
       "      <td>TRYYYUS12903CD2DF0</td>\n",
       "      <td>O Samba Da Vida</td>\n",
       "      <td>SOTXAME12AB018F136</td>\n",
       "      <td>Pacha V.I.P.</td>\n",
       "      <td>AR7Z4J81187FB3FC59</td>\n",
       "      <td>9d50cb20-7e42-45cc-b0dd-154c3e92a577</td>\n",
       "      <td>Kiko Navarro</td>\n",
       "      <td>217.44281</td>\n",
       "      <td>0.528617</td>\n",
       "      <td>0.411595</td>\n",
       "      <td>0</td>\n",
       "      <td>7522478</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999996</th>\n",
       "      <td>TRYYYJO128F426DA37</td>\n",
       "      <td>Jago Chhadeo</td>\n",
       "      <td>SOXQYIQ12A8C137FBB</td>\n",
       "      <td>Naale Baba Lassi Pee Gya</td>\n",
       "      <td>ART5FZD1187B9A7FCF</td>\n",
       "      <td>2357c400-9109-42b6-b3fe-9e2d9f8e3872</td>\n",
       "      <td>Kuldeep Manak</td>\n",
       "      <td>244.16608</td>\n",
       "      <td>0.401500</td>\n",
       "      <td>0.374866</td>\n",
       "      <td>0</td>\n",
       "      <td>1632096</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999997</th>\n",
       "      <td>TRYYYMG128F4260ECA</td>\n",
       "      <td>Novemba</td>\n",
       "      <td>SOHODZI12A8C137BB3</td>\n",
       "      <td>Dub_Connected: electronic music</td>\n",
       "      <td>ARZ3R6M1187B9AF750</td>\n",
       "      <td>8b97e9c8-61f5-4615-9a96-276f24204e34</td>\n",
       "      <td>Gabriel Le Mar</td>\n",
       "      <td>553.03791</td>\n",
       "      <td>0.556918</td>\n",
       "      <td>0.336914</td>\n",
       "      <td>0</td>\n",
       "      <td>2219291</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999998</th>\n",
       "      <td>TRYYYDJ128F9310A21</td>\n",
       "      <td>Faraday</td>\n",
       "      <td>SOLXGOR12A81C21EB7</td>\n",
       "      <td>The Trance Collection Vol. 2</td>\n",
       "      <td>ARCMCOK1187B9B1073</td>\n",
       "      <td>4ac5f3de-c5ad-475e-ad50-41f1ef9dba20</td>\n",
       "      <td>Elude</td>\n",
       "      <td>484.51873</td>\n",
       "      <td>0.403668</td>\n",
       "      <td>0.256935</td>\n",
       "      <td>0</td>\n",
       "      <td>5472456</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999999</th>\n",
       "      <td>TRYYYVU12903CD01E3</td>\n",
       "      <td>Fernweh feat. Sektion Kuchikäschtli</td>\n",
       "      <td>SOWXJXQ12AB0189F43</td>\n",
       "      <td>So Oder So</td>\n",
       "      <td>AR7PLM21187B990D08</td>\n",
       "      <td>3af2b07e-c91c-4160-9bda-f0b9e3144ed3</td>\n",
       "      <td>Texta</td>\n",
       "      <td>295.07873</td>\n",
       "      <td>0.552977</td>\n",
       "      <td>0.454869</td>\n",
       "      <td>2004</td>\n",
       "      <td>8486723</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000000 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                  track_id                                              title  \\\n",
       "0       TRMMMYQ128F932D901                                       Silent Night   \n",
       "1       TRMMMKD128F425225D                                        Tanssi vaan   \n",
       "2       TRMMMRX128F93187D9                                  No One Could Ever   \n",
       "3       TRMMMCH128F425532C                                      Si Vos Querés   \n",
       "4       TRMMMWA128F426B589                                   Tangle Of Aspens   \n",
       "5       TRMMMXN128F42936A5  Symphony No. 1 G minor \"Sinfonie Serieuse\"/All...   \n",
       "6       TRMMMLR128F1494097                                   We Have Got Love   \n",
       "7       TRMMMBB12903CB7D21                                  2 Da Beat Ch'yall   \n",
       "8       TRMMMHY12903CB53F1                                            Goodbye   \n",
       "9       TRMMMML128F4280EE9                         Mama_ mama can't you see ?   \n",
       "10      TRMMMNS128F93548E1                                      L'antarctique   \n",
       "11      TRMMMXJ12903CBF111                                 El hijo del pueblo   \n",
       "12      TRMMMCJ128F930BFF8                Cold Beer feat. Prince Metropolitan   \n",
       "13      TRMMMBW128F4260CAE                                             Pilots   \n",
       "14      TRMMMXI128F4285A3F                                             N Gana   \n",
       "15      TRMMMKI128F931D80D                                                006   \n",
       "16      TRMMMUT128F42646E8                (Looking For) The Heart Of Saturday   \n",
       "17      TRMMMQY128F92F0EA3                                  Ethos of Coercion   \n",
       "18      TRMMMTK128F424EF7C                                        Rock-N-Rule   \n",
       "19      TRMMMHQ128F4278194                                      La bola extra   \n",
       "20      TRMMMQV12903CA201E                                     I Made It Over   \n",
       "21      TRMMMMV128F14746A5      Debussy : 12 Etudes : VI Pour les huit doigts   \n",
       "22      TRMMMPN128F426610E                                            Nervous   \n",
       "23      TRMMMNO128F93539AA                                     In The Journey   \n",
       "24      TRMMMTG128F426B5BB                          Fuckin Ethic People (999)   \n",
       "25      TRMMMPJ128F9306985                                 Tu Vida Con La Mía   \n",
       "26      TRMMMRZ128F4265EB4                                          I'm Ready   \n",
       "27      TRMMMKD12903CF219E                                     Take As Needed   \n",
       "28      TRMMMRR12903CF395D              Autumn In The Mind (Acoustic Version)   \n",
       "29      TRMMMJW12903CF239E                                            Tequila   \n",
       "...                    ...                                                ...   \n",
       "999970  TRYYYOM12903CEAAE5                          21st century Schizoid Man   \n",
       "999971  TRYYYCS128F930C271                               Your Lingering Touch   \n",
       "999972  TRYYYJZ128F424BFA1                                        Deliverance   \n",
       "999973  TRYYYWE12903CE4FF9                                           Parkhaus   \n",
       "999974  TRYYYDX128EF34FF8A                                        Ghost Audio   \n",
       "999975  TRYYYPK128F934115F                                        Water Works   \n",
       "999976  TRYYYVI12903CAEDF6                                                Six   \n",
       "999977  TRYYYLV128F14AFD76                                         Reflectuum   \n",
       "999978  TRYYYWR128F4267C95                Judith (Renholder Remix) (Explicit)   \n",
       "999979  TRYYYFV128F4277D53                                       Too Much Fun   \n",
       "999980  TRYYYWS128EF34A1FF                        Think Of Me As Your Soldier   \n",
       "999981  TRYYYBR128F9322E4D                                            Daramad   \n",
       "999982  TRYYYRP128F429F636                             Troubled 'Bout My Soul   \n",
       "999983  TRYYYUP128F933063B                                     A Love Of Home   \n",
       "999984  TRYYYOU128F426B209                                Interrotte Speranze   \n",
       "999985  TRYYYYM12903CAD996                                         As You Are   \n",
       "999986  TRYYYDS128F422DC77                                       Gazm Or Gasm   \n",
       "999987  TRYYYVJ128F4258203                                              Ether   \n",
       "999988  TRYYYWX128F92E11D1                                   Wouldn't Get Far   \n",
       "999989  TRYYYHG128F9343EFB                                              Chill   \n",
       "999990  TRYYYYS12903D0605A                                           Way Down   \n",
       "999991  TRYYYLF128E0789A44                                     So Many People   \n",
       "999992  TRYYYZM128F428E804                                  Inequality Street   \n",
       "999993  TRYYYON128F932585A                           Taurus (Keenhouse Remix)   \n",
       "999994  TRYYYNQ128F92E0292                              Down Fo' The Kick Doe   \n",
       "999995  TRYYYUS12903CD2DF0                                    O Samba Da Vida   \n",
       "999996  TRYYYJO128F426DA37                                       Jago Chhadeo   \n",
       "999997  TRYYYMG128F4260ECA                                            Novemba   \n",
       "999998  TRYYYDJ128F9310A21                                            Faraday   \n",
       "999999  TRYYYVU12903CD01E3                Fernweh feat. Sektion Kuchikäschtli   \n",
       "\n",
       "                   song_id                                            release  \\\n",
       "0       SOQMMHC12AB0180CB8                              Monster Ballads X-Mas   \n",
       "1       SOVFVAK12A8C1350D9                                        Karkuteillä   \n",
       "2       SOGTUKN12AB017F4F1                                             Butter   \n",
       "3       SOBNYVR12A8C13558C                                            De Culo   \n",
       "4       SOHSBXH12A8C13B0DF               Rene Ablaze Presents Winter Sessions   \n",
       "5       SOZVAPQ12A8C13B63C                   Berwald: Symphonies Nos. 1/2/3/4   \n",
       "6       SOQVRHI12A6D4FB2D7                          Strictly The Best Vol. 34   \n",
       "7       SOEYRFT12AB018936C                                            Da Bomb   \n",
       "8       SOPMIYT12A6D4F851E                                          Danny Boy   \n",
       "9       SOJCFMH12A8C13B0C2               March to cadence with the US marines   \n",
       "10      SOYGNWH12AB018191E                          Des cobras des tarentules   \n",
       "11      SOLJTLX12AB01890ED                            32 Grandes Éxitos  CD 2   \n",
       "12      SOQQESG12A58A7AA28                   International Hardcore Superstar   \n",
       "13      SOMPVQB12A8C1379BB                                          The Loyal   \n",
       "14      SOGPCJI12A8C13CCA0             Afropea 3 - Telling Stories To The Sea   \n",
       "15      SOSDCFG12AB0184647                                         Lena 20 År   \n",
       "16      SOBARPM12A8C133DFF                                         Cover Girl   \n",
       "17      SOKOVRQ12A8C142811                             Descend Into Depravity   \n",
       "18      SOIMMJJ12AF72AD643               I'm Only A Man (Bonus Track Version)   \n",
       "19      SOVMBTP12A8C13A8F6                                      La bola extra   \n",
       "20      SOOUESZ12AB0189AFD                      Let's Celebrate (He Is Risen)   \n",
       "21      SOAGMGG12A6D4F9099             Debussy : 12 Etudes_ Images Sets 1 & 2   \n",
       "22      SOGFWVT12A8C137C64             Let No One Live Rent Free In Your Head   \n",
       "23      SOKLPMH12AB01861FA                                     In The Journey   \n",
       "24      SOEPAIN12A8C1396A7                                      Crazeë Musick   \n",
       "25      SOQMZZI12AB01850D4                                   Hoy Quiero Soñar   \n",
       "26      SOEEHEY12CF5F88FB4                                    Honkin' On Bobo   \n",
       "27      SOWUMAZ12A67ADE769                                       Nerve Damage   \n",
       "28      SOJJAZT12AC4687219                         Lo Fi_ Acoustic Excursions   \n",
       "29      SOMLHJQ12AC4685B45             Tequila il mambo del giubileo (12 Inc)   \n",
       "...                    ...                                                ...   \n",
       "999970  SONODQO12AB018DB65                                Live in London 2008   \n",
       "999971  SOQVXTX12AB017F110                               Your Lingering Touch   \n",
       "999972  SOJYTFC12A6D4FD812                                          Rock Love   \n",
       "999973  SOIQVTG12AC468E9C0                                        Inselwissen   \n",
       "999974  SOTPCUY12A6D223AE7                                       Noise Brulée   \n",
       "999975  SOZGIHP12A58A7BA4F                                           Little D   \n",
       "999976  SOCGVWG12A8C135685                                                Six   \n",
       "999977  SOYCIHR12A6D4FBC6A                                         Eve Future   \n",
       "999978  SOQHTGU12A8C136FA8                                            aMOTION   \n",
       "999979  SOHYZUP12B0B8064C3                                  The Fashion Focus   \n",
       "999980  SOELYAZ12A6BD4E103                              Where I'm Coming From   \n",
       "999981  SORDTRE12AB017E986             Shajarian Golden Songs - Persian Music   \n",
       "999982  SOOUXVD12A8C142677  Jaybird Coleman & The Birmingham Jug Band (192...   \n",
       "999983  SOVPZKZ12AB01845DE                                   Laughter At Dawn   \n",
       "999984  SOIQNVK12A8C13B061                                         Lux Noctis   \n",
       "999985  SOZQSBC12AB018A833                                         As You Are   \n",
       "999986  SOOZJQN12A81C1FDD0                                          Panoramic   \n",
       "999987  SOMDVLO12A58A7A02B                                                  0   \n",
       "999988  SOYKHSL12AF72A35AC                                   Wouldn't Get Far   \n",
       "999989  SOIDAMG12AB0182B3A                   Oxygen Refreshed (Instrumentals)   \n",
       "999990  SOFAXZU12AB01881C4                                           Way Down   \n",
       "999991  SOYFFWW12A6701C135                                               Four   \n",
       "999992  SOBODSE12A8C13EBD6                         No Daylights_ Nor Heeltaps   \n",
       "999993  SOWCNSN12AB018070F                                             Taurus   \n",
       "999994  SOVRJOO12A8C143C7A  Messy Marv Presents: Draped Up and Chipped Out...   \n",
       "999995  SOTXAME12AB018F136                                       Pacha V.I.P.   \n",
       "999996  SOXQYIQ12A8C137FBB                           Naale Baba Lassi Pee Gya   \n",
       "999997  SOHODZI12A8C137BB3                    Dub_Connected: electronic music   \n",
       "999998  SOLXGOR12A81C21EB7                       The Trance Collection Vol. 2   \n",
       "999999  SOWXJXQ12AB0189F43                                         So Oder So   \n",
       "\n",
       "                 artist_id                           artist_mbid  \\\n",
       "0       ARYZTJS1187B98C555  357ff05d-848a-44cf-b608-cb34b5701ae5   \n",
       "1       ARMVN3U1187FB3A1EB  8d7ef530-a6fd-4f8f-b2e2-74aec765e0f9   \n",
       "2       ARGEKB01187FB50750  3d403d44-36ce-465c-ad43-ae877e65adc4   \n",
       "3       ARNWYLR1187B9B2F9C  12be7648-7094-495f-90e6-df4189d68615   \n",
       "4       AREQDTE1269FB37231                                         \n",
       "5       AR2NS5Y1187FB5879D  d087b377-bab7-46c4-bd12-15debebb5d61   \n",
       "6       ARO41T51187FB397AB  d2461c0a-5575-4425-a225-fce0180de3fd   \n",
       "7       AR3Z9WY1187FB4CDC2  bf61e8ff-7621-4655-8ebd-68210645c5e9   \n",
       "8       ARA04401187B991E6E  1a9bf859-1dc2-495b-9e7c-289be7731a9f   \n",
       "9       ARCVMYS12454A51E6E                                         \n",
       "10      AR59BSJ1187FB4474F  891fccfc-24c1-4bfd-bf49-c736e59e443f   \n",
       "11      ARCVIFR1187B99129F  ec57c22f-9bb7-48ab-aa85-dab108a71b53   \n",
       "12      ARVIT0V1187B9A7CDE  2eb02f8c-8dfa-49dc-a224-11051ec45a42   \n",
       "13      AREMPER1187B9AEB42  14efbb08-c3d8-404c-9ead-ad71fa586ee6   \n",
       "14      ARBAMQB1187FB3C650  0bb5e108-b41d-46cd-969e-69d34d1acdfe   \n",
       "15      ARSB5591187B99A848  fba3e876-68f1-4a1f-99d9-c604480202ba   \n",
       "16      ARDW5AW1187FB55708  42222090-c5e5-4243-8582-c29bc8b63ec6   \n",
       "17      ARGWPP11187B9AEF43  f76167bb-c117-4022-8b6b-54c796edf5c9   \n",
       "18      ARDT9VH1187B999C0B  6b22de04-fb48-44aa-bd02-c1427f635477   \n",
       "19      ARWFDED1187B9B9D71  8ff7e1b4-18f8-48ec-a8a0-793ab1a5511c   \n",
       "20      ARVF2AD1187FB47580  fd711779-5524-4ed3-8d68-da0b867caa34   \n",
       "21      AR0GK7N1187B9AC56C  bfc4370b-c0d9-46c7-825b-bf09f9b65264   \n",
       "22      AR66C9X1187B98F7EA  b9313805-5fe0-4f1b-9f5c-9e52565a5a3d   \n",
       "23      AR4TLW81187B99683D  0685ac4a-5cfc-408a-b391-903ea20e00bf   \n",
       "24      ARDPJYJ11F4C83E24A                                         \n",
       "25      ARBE9HD1187FB40016  8cc00e45-94c9-40e0-882b-0e76dd5b472b   \n",
       "26      AR12F2S1187FB56EEF  3d2b98e5-556f-4451-a3ff-c50ea18d57cb   \n",
       "27      AREH0O41187FB4C405  83e32d32-fee5-45de-a4b6-b49956a069eb   \n",
       "28      ARN5X9D1187B998A6D  2f338a80-cae4-40e8-a0f7-9b5468479e3a   \n",
       "29      AR52DCD1187B992B5F  80d946ff-0567-4882-ad91-77c5d47448b8   \n",
       "...                    ...                                   ...   \n",
       "999970  ARG6UOX1187B9922D8  15145488-7bed-4f88-96d1-9408a04345d8   \n",
       "999971  ARYT62X1187FB5962F  98261682-3a40-47d8-8b2e-12866ace3120   \n",
       "999972  ARNLVQB1187B9AEAB0  e57f0cac-4f56-473c-8d7e-d93f753fd586   \n",
       "999973  AR0KEBK11C8A421F77  a8236a47-f643-409a-946b-d0c0b6d5c115   \n",
       "999974  ARMTQWT12454A422D5                                         \n",
       "999975  ARTEGNK1187FB554BC  d09ef6e9-321b-4715-9a93-b7392032f8be   \n",
       "999976  ARRHVVL1187B991E41  8ca2e10a-7a93-4065-aa77-8f277bfb1c84   \n",
       "999977  ARI9UV41187B98AB58  05498d7c-5bd0-40fa-aabf-a39f34efba5c   \n",
       "999978  ARVDO8G1187B99F43E  078a9376-3c04-4280-b7d7-b20e158f345d   \n",
       "999979  ARH65291187B989DB5  250c38d6-0353-4c22-a371-f305d908573c   \n",
       "999980  ARUM60L1187B9A7E1F  1ee18fb3-18a6-4c7f-8ba0-bc41cdd0462e   \n",
       "999981  ARFCWGU11F50C5117F                                         \n",
       "999982  AR7LMZA1187B98CEA4  8f934d34-175f-4b70-8cf4-c3eb6682e818   \n",
       "999983  ARWGIOC1187FB4CBEF  7d4624c6-5e71-49f9-a3aa-fc9951953cbb   \n",
       "999984  ARHHIW21187FB5BD76  92ff6a4e-7070-4ddc-a62f-da9833aa236a   \n",
       "999985  AR3UUTN1187FB5AF47  6432a8de-1461-4217-909f-d956f21c83d7   \n",
       "999986  AR2328I1187B99D7AD  a951a227-21ca-4fe4-a0d7-9d98fd6cb18e   \n",
       "999987  AR9ZEEW1187B9B0666  2a6f9aed-dc6f-4bfb-a9a4-be7078f71ed0   \n",
       "999988  ARPBTRI1187FB52457  baec7ed1-32d7-482d-9455-33c403e61952   \n",
       "999989  ARKUAXS11F4C841DEB  a6cf94d3-a1ff-4191-87cb-688b4f6a3890   \n",
       "999990  ARL73HN1187B993D29  397cd952-ae9c-40cb-a504-fd0ef47ec120   \n",
       "999991  ARCFNAM1187B99424A  f304492a-0318-4806-b5f6-dd69dc020460   \n",
       "999992  AR1I9KS1187B9AEFD4  8fe90664-ee90-4b18-b4e9-9b7cf02807bd   \n",
       "999993  ARWHGZD122BCFCC06A  fa50592e-ae8d-4f68-9c4d-3acdeb035227   \n",
       "999994  AR5R6781187B98BE78  47864525-aea7-439a-800f-17c57e51cbcc   \n",
       "999995  AR7Z4J81187FB3FC59  9d50cb20-7e42-45cc-b0dd-154c3e92a577   \n",
       "999996  ART5FZD1187B9A7FCF  2357c400-9109-42b6-b3fe-9e2d9f8e3872   \n",
       "999997  ARZ3R6M1187B9AF750  8b97e9c8-61f5-4615-9a96-276f24204e34   \n",
       "999998  ARCMCOK1187B9B1073  4ac5f3de-c5ad-475e-ad50-41f1ef9dba20   \n",
       "999999  AR7PLM21187B990D08  3af2b07e-c91c-4160-9bda-f0b9e3144ed3   \n",
       "\n",
       "                                              artist_name   duration  \\\n",
       "0                                        Faster Pussy cat  252.05506   \n",
       "1                                        Karkkiautomaatti  156.55138   \n",
       "2                                          Hudson Mohawke  138.97098   \n",
       "3                                             Yerba Brava  145.05751   \n",
       "4                                              Der Mystic  514.29832   \n",
       "5                                        David Montgomery  816.53506   \n",
       "6                                      Sasha / Turbulence  212.37506   \n",
       "7                                              Kris Kross  221.20444   \n",
       "8                                            Joseph Locke  139.17995   \n",
       "9          The Sun Harbor's Chorus-Documentary Recordings  104.48934   \n",
       "10                                       3 Gars Su'l Sofa   68.96281   \n",
       "11                                          Jorge Negrete  168.22812   \n",
       "12                                           Danny Diablo  301.60934   \n",
       "13                                              Tiger Lou  318.45832   \n",
       "14                                        Waldemar Bastos  273.18812   \n",
       "15                                        Lena Philipsson  262.26893   \n",
       "16                                           Shawn Colvin  216.47628   \n",
       "17                                            Dying Fetus  196.02240   \n",
       "18                                                  Emery  217.57342   \n",
       "19                                           Los Ronaldos  355.60444   \n",
       "20                                    Rev. Timothy Wright  353.77587   \n",
       "21                                  Pierre-Laurent Aimard   93.12608   \n",
       "22                                              Nicolette  213.47220   \n",
       "23                                          Martin Sexton  319.81669   \n",
       "24                                                  Craze  204.19873   \n",
       "25                                       Christian Castro  258.89914   \n",
       "26                                              Aerosmith  253.70077   \n",
       "27                                                Skinlab  210.93832   \n",
       "28                                Mike Badger and Friends  180.55791   \n",
       "29                                                 Piotta  216.03220   \n",
       "...                                                   ...        ...   \n",
       "999970                                     Nash The Slash  302.91546   \n",
       "999971                                               Govi  264.61995   \n",
       "999972                                  Steve Miller Band  561.18812   \n",
       "999973                                     Captain Planet  195.97016   \n",
       "999974                                 Lenny Dee & Radium  299.28444   \n",
       "999975                                            Fishboy   96.10404   \n",
       "999976                                            Hi-Tack  163.31710   \n",
       "999977                                           Kreidler  218.56608   \n",
       "999978                                   A Perfect Circle  264.95955   \n",
       "999979                                       Starflyer 59  462.26240   \n",
       "999980                                      Stevie Wonder  219.14077   \n",
       "999981                            Mohammad Reza Shajarian  319.63383   \n",
       "999982              Jaybird Coleman & Birmingham Jug Band  175.35955   \n",
       "999983                                       Jim Chappell  231.96689   \n",
       "999984                                          Coronatus   88.45016   \n",
       "999985                    Neal Scarborough & Gary Maguire  513.20118   \n",
       "999986                                          Sinner Dc  153.23383   \n",
       "999987                                      Transmission0  228.20526   \n",
       "999988                                           The Game  251.01016   \n",
       "999989                                        Jazz Addixx  245.91628   \n",
       "999990               Taylor Hawkins & The Coattail Riders  228.41424   \n",
       "999991                                          Bah Samba  258.76853   \n",
       "999992                                            SKYCLAD  241.21424   \n",
       "999993                                         Loose Shus  295.88853   \n",
       "999994  Killer Mike feat. Gangsta Pill and Nario of Gr...  185.33832   \n",
       "999995                                       Kiko Navarro  217.44281   \n",
       "999996                                      Kuldeep Manak  244.16608   \n",
       "999997                                     Gabriel Le Mar  553.03791   \n",
       "999998                                              Elude  484.51873   \n",
       "999999                                              Texta  295.07873   \n",
       "\n",
       "        artist_familiarity  artist_hotttnesss  year  track_7digitalid  \\\n",
       "0                 0.649822           0.394032  2003           7032331   \n",
       "1                 0.439604           0.356992  1995           1514808   \n",
       "2                 0.643681           0.437504  2006           6945353   \n",
       "3                 0.448501           0.372349  2003           2168257   \n",
       "4                 0.000000           0.000000     0           2264873   \n",
       "5                 0.361287           0.109626     0           3360982   \n",
       "6                 0.692923           0.453732     0            552626   \n",
       "7                 0.588156           0.401092  1993           6435649   \n",
       "8                 0.408465           0.285901     0           8376489   \n",
       "9                 0.419941           0.249137     0           1043208   \n",
       "10                0.555014           0.352949  2007           7192392   \n",
       "11                0.541390           0.369096  1997           7928975   \n",
       "12                0.622005           0.451579     0           6893903   \n",
       "13                0.621826           0.406985  2005           2218694   \n",
       "14                0.543690           0.373679     0           2387740   \n",
       "15                0.529819           0.410229  1998           6010886   \n",
       "16                0.685503           0.446733  1994           3156269   \n",
       "17                0.734471           0.511976  2009           6782293   \n",
       "18                0.738996           0.563367  2007           1501464   \n",
       "19                0.467145           0.409127     0           2318206   \n",
       "20                0.377190           0.290242     0           6345139   \n",
       "21                0.413739           0.383463     0            373519   \n",
       "22                0.593554           0.297176  1996           2242562   \n",
       "23                0.641198           0.448653  2001           5749967   \n",
       "24                0.559135           0.404594     0           2851707   \n",
       "25                0.583717           0.396613     0           4970915   \n",
       "26                0.853383           0.610432  2004           3162359   \n",
       "27                0.729867           0.417882  2002           8138503   \n",
       "28                0.430914           0.000000     0           7656579   \n",
       "29                0.542922           0.411241     0           8626743   \n",
       "...                    ...                ...   ...               ...   \n",
       "999970            0.492079           0.321454  2008           9071268   \n",
       "999971            0.579400           0.392385  1997           5938495   \n",
       "999972            0.771815           0.547589  1971           3037984   \n",
       "999973            0.544325           0.468412  2009           6622577   \n",
       "999974            0.419483           0.280224     0            780870   \n",
       "999975            0.565545           0.355600     0           5222979   \n",
       "999976            0.494902           0.334144     0           7373757   \n",
       "999977            0.496291           0.338061  2002            679004   \n",
       "999978            0.762362           0.597867     0           1608280   \n",
       "999979            0.657696           0.537043  1998           1674434   \n",
       "999980            0.757921           0.600265  1971            751885   \n",
       "999981            0.432962           0.365638     0           5547426   \n",
       "999982            0.398604           0.291375     0           1872060   \n",
       "999983            0.520205           0.361510     0           5603681   \n",
       "999984            0.560206           0.376075  2007           2263977   \n",
       "999985            0.494158           0.362108     0           7368508   \n",
       "999986            0.510366           0.409529     0           1950431   \n",
       "999987            0.497783           0.381368  2004           2180621   \n",
       "999988            0.927986           0.599860     0           5761158   \n",
       "999989            0.481678           0.328194     0           5234679   \n",
       "999990            0.735147           0.471100  2010           8707936   \n",
       "999991            0.586555           0.340153  2002            117121   \n",
       "999992            0.592700           0.429545  1996           1769789   \n",
       "999993            0.517673           0.360972     0           5558247   \n",
       "999994            0.699599           0.392061     0           4809599   \n",
       "999995            0.528617           0.411595     0           7522478   \n",
       "999996            0.401500           0.374866     0           1632096   \n",
       "999997            0.556918           0.336914     0           2219291   \n",
       "999998            0.403668           0.256935     0           5472456   \n",
       "999999            0.552977           0.454869  2004           8486723   \n",
       "\n",
       "        shs_perf  shs_work  \n",
       "0             -1         0  \n",
       "1             -1         0  \n",
       "2             -1         0  \n",
       "3             -1         0  \n",
       "4             -1         0  \n",
       "5             -1         0  \n",
       "6             -1         0  \n",
       "7             -1         0  \n",
       "8             -1         0  \n",
       "9             -1         0  \n",
       "10            -1         0  \n",
       "11            -1         0  \n",
       "12            -1         0  \n",
       "13            -1         0  \n",
       "14            -1         0  \n",
       "15            -1         0  \n",
       "16            -1         0  \n",
       "17            -1         0  \n",
       "18            -1         0  \n",
       "19            -1         0  \n",
       "20            -1         0  \n",
       "21            -1         0  \n",
       "22            -1         0  \n",
       "23            -1         0  \n",
       "24            -1         0  \n",
       "25            -1         0  \n",
       "26         26760     10040  \n",
       "27            -1         0  \n",
       "28            -1         0  \n",
       "29            -1         0  \n",
       "...          ...       ...  \n",
       "999970        -1         0  \n",
       "999971        -1         0  \n",
       "999972        -1         0  \n",
       "999973        -1         0  \n",
       "999974        -1         0  \n",
       "999975        -1         0  \n",
       "999976        -1         0  \n",
       "999977        -1         0  \n",
       "999978        -1         0  \n",
       "999979        -1         0  \n",
       "999980        -1         0  \n",
       "999981        -1         0  \n",
       "999982        -1         0  \n",
       "999983        -1         0  \n",
       "999984        -1         0  \n",
       "999985        -1         0  \n",
       "999986        -1         0  \n",
       "999987        -1         0  \n",
       "999988        -1         0  \n",
       "999989        -1         0  \n",
       "999990        -1         0  \n",
       "999991        -1         0  \n",
       "999992        -1         0  \n",
       "999993        -1         0  \n",
       "999994        -1         0  \n",
       "999995        -1         0  \n",
       "999996        -1         0  \n",
       "999997        -1         0  \n",
       "999998        -1         0  \n",
       "999999        -1         0  \n",
       "\n",
       "[1000000 rows x 14 columns]"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "track_metadata_df = pd.read_sql(con = conn,sql = 'SELECT * FROM songs')\n",
    "track_metadata_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "track_metadata_df_sub = track_metadata_df[track_metadata_df.song_id.isin(song_subset)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "track_metadata_df_sub.to_csv(path_or_buf='./track_metadata_df_sub1.csv',index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(20346, 14)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "track_metadata_df_sub.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 清洗数据集"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "去除掉无用的和重复的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "del(track_metadata_df_sub['track_id'])\n",
    "del(track_metadata_df_sub['artist_mbid'])\n",
    "del(track_metadata_df_sub['artist_id'])\n",
    "del(track_metadata_df_sub['duration'])\n",
    "del(track_metadata_df_sub['artist_familiarity'])\n",
    "del(track_metadata_df_sub['artist_hotttnesss'])\n",
    "del(track_metadata_df_sub['track_7digitalid'])\n",
    "del(track_metadata_df_sub['shs_perf'])\n",
    "del(track_metadata_df_sub['shs_work'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "track_metadata_df_sub = track_metadata_df_sub.drop_duplicates(['song_id'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "与triple_dataset_sub_song进行连接操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_sub_song_merged = pd.merge(triplet_dataset_sub_song,track_metadata_df_sub,\n",
    "                                          how = 'left',left_on = 'song',right_on = 'song_id')\n",
    "triplet_dataset_sub_song_merged.rename(columns = {'play_count':'listen_count'},inplace = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>title</th>\n",
       "      <th>song_id</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAKIMP12A8C130995</td>\n",
       "      <td>1</td>\n",
       "      <td>The Cove</td>\n",
       "      <td>SOAKIMP12A8C130995</td>\n",
       "      <td>Thicker Than Water</td>\n",
       "      <td>Jack Johnson</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAPDEY12A81C210A9</td>\n",
       "      <td>1</td>\n",
       "      <td>Nothing from Nothing</td>\n",
       "      <td>SOAPDEY12A81C210A9</td>\n",
       "      <td>To Die For</td>\n",
       "      <td>Billy Preston</td>\n",
       "      <td>1974</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBBMDR12A8C13253B</td>\n",
       "      <td>2</td>\n",
       "      <td>Entre Dos Aguas</td>\n",
       "      <td>SOBBMDR12A8C13253B</td>\n",
       "      <td>Flamenco Para Niños</td>\n",
       "      <td>Paco De Lucia</td>\n",
       "      <td>1976</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBFNSP12AF72A0E22</td>\n",
       "      <td>1</td>\n",
       "      <td>Under Cold Blue Stars</td>\n",
       "      <td>SOBFNSP12AF72A0E22</td>\n",
       "      <td>Under Cold Blue Stars</td>\n",
       "      <td>Josh Rouse</td>\n",
       "      <td>2002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBSUJE12A6D4F8CF5</td>\n",
       "      <td>2</td>\n",
       "      <td>12 segundos de oscuridad</td>\n",
       "      <td>SOBSUJE12A6D4F8CF5</td>\n",
       "      <td>10 + Downloaded</td>\n",
       "      <td>Jorge Drexler</td>\n",
       "      <td>2006</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  listen_count  \\\n",
       "0  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAKIMP12A8C130995             1   \n",
       "1  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAPDEY12A81C210A9             1   \n",
       "2  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBBMDR12A8C13253B             2   \n",
       "3  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBFNSP12AF72A0E22             1   \n",
       "4  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBSUJE12A6D4F8CF5             2   \n",
       "\n",
       "                      title             song_id                release  \\\n",
       "0                  The Cove  SOAKIMP12A8C130995     Thicker Than Water   \n",
       "1      Nothing from Nothing  SOAPDEY12A81C210A9             To Die For   \n",
       "2           Entre Dos Aguas  SOBBMDR12A8C13253B    Flamenco Para Niños   \n",
       "3     Under Cold Blue Stars  SOBFNSP12AF72A0E22  Under Cold Blue Stars   \n",
       "4  12 segundos de oscuridad  SOBSUJE12A6D4F8CF5        10 + Downloaded   \n",
       "\n",
       "     artist_name  year  \n",
       "0   Jack Johnson     0  \n",
       "1  Billy Preston  1974  \n",
       "2  Paco De Lucia  1976  \n",
       "3     Josh Rouse  2002  \n",
       "4  Jorge Drexler  2006  "
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song_merged.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# 简单分析一下数据集的情况"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最流行的top20歌曲名称"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "popular_songs = triplet_dataset_sub_song_merged.groupby('title')['listen_count'].sum().reset_index()\n",
    "popular_songs_top20 = triplet_dataset_sub_song_merged.sort_values('listen_count',ascending = False).head(n = 20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x159d82f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "objects = list(popular_songs_top20['title'])\n",
    "y_pos = np.arange(len(objects))\n",
    "performence = list(popular_songs_top20['listen_count'])\n",
    "\n",
    "plt.bar(y_pos,performence,align = 'center',alpha = 0.5)\n",
    "plt.xticks(y_pos,objects,rotation = 'vertical')\n",
    "plt.ylabel('Item counts')\n",
    "plt.title('Most popular songs')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最受欢迎的release"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x20db6850>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "popular_release = triplet_dataset_sub_song_merged[['release','listen_count']].groupby('release').sum().reset_index()\n",
    "popular_release_top_20 = popular_release.sort_values('listen_count', ascending=False).head(n=20)\n",
    "\n",
    "objects = (list(popular_release_top_20['release']))\n",
    "y_pos = np.arange(len(objects))\n",
    "performance = list(popular_release_top_20['listen_count'])\n",
    " \n",
    "plt.bar(y_pos, performance, align='center', alpha=0.5)\n",
    "plt.xticks(y_pos, objects, rotation='vertical')\n",
    "plt.ylabel('Item count')\n",
    "plt.title('Most popular Release')\n",
    " \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最受欢迎的歌手"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x25722eb0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "popular_artist = triplet_dataset_sub_song_merged[['artist_name','listen_count']].groupby('artist_name').sum().reset_index()\n",
    "popular_artist_top_20 = popular_artist.sort_values('listen_count', ascending=False).head(n=20)\n",
    "\n",
    "objects = (list(popular_artist_top_20['artist_name']))\n",
    "y_pos = np.arange(len(objects))\n",
    "performance = list(popular_artist_top_20['listen_count'])\n",
    " \n",
    "plt.bar(y_pos, performance, align='center', alpha=0.5)\n",
    "plt.xticks(y_pos, objects, rotation='vertical')\n",
    "plt.ylabel('Item count')\n",
    "plt.title('Most popular Artists')\n",
    " \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用户播放量的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    9999.000000\n",
       "mean       49.815882\n",
       "std        44.772202\n",
       "min         1.000000\n",
       "25%        22.000000\n",
       "50%        37.000000\n",
       "75%        62.000000\n",
       "max       695.000000\n",
       "Name: title, dtype: float64"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_song_count_distibution = triplet_dataset_sub_song_merged.groupby('user')['title'].count().reset_index().sort_values(\n",
    "by = 'title',ascending = False)\n",
    "user_song_count_distibution.title.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x27dd3f90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = user_song_count_distibution.title\n",
    "plt.hist(x,50,facecolor = 'green',alpha = 0.75)\n",
    "plt.xlabel('Play Counts')\n",
    "plt.ylabel('Num Of Users')\n",
    "plt.title('Histogram of User Play Count Distribution')\n",
    "plt.grid(True)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 推荐系统"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import Recommenders as Recommenders\n",
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "简单暴力，排行榜单推荐（适合解决冷启动问题）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_sub_song_merged_set = triplet_dataset_sub_song_merged\n",
    "train_data,test_data = train_test_split(triplet_dataset_sub_song_merged_set,test_size = 0.4,random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>title</th>\n",
       "      <th>song_id</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>386897</th>\n",
       "      <td>4fad5d1aab6e6c643cb32ad6d889c74fab11d859</td>\n",
       "      <td>SOTASGN12AC9075A8F</td>\n",
       "      <td>1</td>\n",
       "      <td>Stuck In The Moment</td>\n",
       "      <td>SOTASGN12AC9075A8F</td>\n",
       "      <td>My Worlds</td>\n",
       "      <td>Justin Bieber</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124377</th>\n",
       "      <td>89180a2679679acf94bd43ac6935df875e237120</td>\n",
       "      <td>SOSNTPY12A6D4F8471</td>\n",
       "      <td>4</td>\n",
       "      <td>Vertigo</td>\n",
       "      <td>SOSNTPY12A6D4F8471</td>\n",
       "      <td>Vertigo</td>\n",
       "      <td>U2</td>\n",
       "      <td>2004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84052</th>\n",
       "      <td>7cea4b3a0b25a1fa828d7bfe86cb11ae13e544f3</td>\n",
       "      <td>SOANQFY12AB0183239</td>\n",
       "      <td>1</td>\n",
       "      <td>Uprising</td>\n",
       "      <td>SOANQFY12AB0183239</td>\n",
       "      <td>Uprising</td>\n",
       "      <td>Muse</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>193599</th>\n",
       "      <td>283882c3d18ff2ad0e17124002ec02b847d06e9a</td>\n",
       "      <td>SOOALOT12A8C13ABD9</td>\n",
       "      <td>56</td>\n",
       "      <td>En Glad Calypso Om Våren (Live '62)</td>\n",
       "      <td>SOOALOT12A8C13ABD9</td>\n",
       "      <td>En Stol På Tegnér</td>\n",
       "      <td>Olle Adolphson</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>227686</th>\n",
       "      <td>991a4f49ffdbc8920f47695f62cd657053f90d62</td>\n",
       "      <td>SOFRQTD12A81C233C0</td>\n",
       "      <td>1</td>\n",
       "      <td>Sehr kosmisch</td>\n",
       "      <td>SOFRQTD12A81C233C0</td>\n",
       "      <td>Musik von Harmonia</td>\n",
       "      <td>Harmonia</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                            user                song  \\\n",
       "386897  4fad5d1aab6e6c643cb32ad6d889c74fab11d859  SOTASGN12AC9075A8F   \n",
       "124377  89180a2679679acf94bd43ac6935df875e237120  SOSNTPY12A6D4F8471   \n",
       "84052   7cea4b3a0b25a1fa828d7bfe86cb11ae13e544f3  SOANQFY12AB0183239   \n",
       "193599  283882c3d18ff2ad0e17124002ec02b847d06e9a  SOOALOT12A8C13ABD9   \n",
       "227686  991a4f49ffdbc8920f47695f62cd657053f90d62  SOFRQTD12A81C233C0   \n",
       "\n",
       "        listen_count                                title             song_id  \\\n",
       "386897             1                  Stuck In The Moment  SOTASGN12AC9075A8F   \n",
       "124377             4                              Vertigo  SOSNTPY12A6D4F8471   \n",
       "84052              1                             Uprising  SOANQFY12AB0183239   \n",
       "193599            56  En Glad Calypso Om Våren (Live '62)  SOOALOT12A8C13ABD9   \n",
       "227686             1                        Sehr kosmisch  SOFRQTD12A81C233C0   \n",
       "\n",
       "                   release     artist_name  year  \n",
       "386897           My Worlds   Justin Bieber  2010  \n",
       "124377             Vertigo              U2  2004  \n",
       "84052             Uprising            Muse     0  \n",
       "193599   En Stol På Tegnér  Olle Adolphson     0  \n",
       "227686  Musik von Harmonia        Harmonia     0  "
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(298865, 8)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def creat_popular_recommendation(train_data,user_id,item_id):\n",
    "    train_data_grouped = train_data.groupby(item_id).agg({user_id:'count'}).reset_index()\n",
    "    train_data_grouped.rename(columns = {user_id:'score'},inplace = True)\n",
    "    \n",
    "    train_data_sort = train_data_grouped.sort_values('score',ascending = False)\n",
    "    \n",
    "    train_data_sort['Rank'] = train_data_sort['score'].rank(ascending = False,method = 'first')\n",
    "    \n",
    "    popularity_recommendations = train_data_sort.head(n = 20)\n",
    "    \n",
    "    return popularity_recommendations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "recommendations = creat_popular_recommendation(train_data,'user','title')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>score</th>\n",
       "      <th>Rank</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>13182</th>\n",
       "      <td>Sehr kosmisch</td>\n",
       "      <td>869</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3851</th>\n",
       "      <td>Dog Days Are Over (Radio Edit)</td>\n",
       "      <td>802</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18293</th>\n",
       "      <td>You're The One</td>\n",
       "      <td>670</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16879</th>\n",
       "      <td>Undo</td>\n",
       "      <td>657</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13161</th>\n",
       "      <td>Secrets</td>\n",
       "      <td>624</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12544</th>\n",
       "      <td>Revelry</td>\n",
       "      <td>620</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6666</th>\n",
       "      <td>Horn Concerto No. 4 in E flat K495: II. Romanc...</td>\n",
       "      <td>553</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6472</th>\n",
       "      <td>Hey_ Soul Sister</td>\n",
       "      <td>515</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5067</th>\n",
       "      <td>Fireflies</td>\n",
       "      <td>512</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16388</th>\n",
       "      <td>Tive Sim</td>\n",
       "      <td>481</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16961</th>\n",
       "      <td>Use Somebody</td>\n",
       "      <td>466</td>\n",
       "      <td>11.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11071</th>\n",
       "      <td>OMG</td>\n",
       "      <td>426</td>\n",
       "      <td>12.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2437</th>\n",
       "      <td>Canada</td>\n",
       "      <td>425</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4150</th>\n",
       "      <td>Drop The World</td>\n",
       "      <td>419</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15807</th>\n",
       "      <td>The Scientist</td>\n",
       "      <td>400</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2215</th>\n",
       "      <td>Bulletproof</td>\n",
       "      <td>399</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2817</th>\n",
       "      <td>Clocks</td>\n",
       "      <td>396</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9687</th>\n",
       "      <td>Marry Me</td>\n",
       "      <td>393</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8167</th>\n",
       "      <td>Just Dance</td>\n",
       "      <td>393</td>\n",
       "      <td>19.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2561</th>\n",
       "      <td>Catch You Baby (Steve Pitron &amp; Max Sanna Radio...</td>\n",
       "      <td>384</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   title  score  Rank\n",
       "13182                                      Sehr kosmisch    869   1.0\n",
       "3851                      Dog Days Are Over (Radio Edit)    802   2.0\n",
       "18293                                     You're The One    670   3.0\n",
       "16879                                               Undo    657   4.0\n",
       "13161                                            Secrets    624   5.0\n",
       "12544                                            Revelry    620   6.0\n",
       "6666   Horn Concerto No. 4 in E flat K495: II. Romanc...    553   7.0\n",
       "6472                                    Hey_ Soul Sister    515   8.0\n",
       "5067                                           Fireflies    512   9.0\n",
       "16388                                           Tive Sim    481  10.0\n",
       "16961                                       Use Somebody    466  11.0\n",
       "11071                                                OMG    426  12.0\n",
       "2437                                              Canada    425  13.0\n",
       "4150                                      Drop The World    419  14.0\n",
       "15807                                      The Scientist    400  15.0\n",
       "2215                                         Bulletproof    399  16.0\n",
       "2817                                              Clocks    396  17.0\n",
       "9687                                            Marry Me    393  18.0\n",
       "8167                                          Just Dance    393  19.0\n",
       "2561   Catch You Baby (Steve Pitron & Max Sanna Radio...    384  20.0"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recommendations"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 基于歌曲相似度的推荐"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "选择一小部分歌曲来试验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "song_count_subset = song_count_df.head(n = 500)\n",
    "user_subset = list(play_count_subset.user)\n",
    "song_subset = list(song_count_subset.song)\n",
    "\n",
    "triplet_dataset_sub_song_merged_sub = triplet_dataset_sub_song_merged[triplet_dataset_sub_song_merged.song.isin(song_subset)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>title</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBXHDL12A81C204C0</td>\n",
       "      <td>1</td>\n",
       "      <td>Stronger</td>\n",
       "      <td>Graduation</td>\n",
       "      <td>Kanye West</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SODACBL12A8C13C273</td>\n",
       "      <td>1</td>\n",
       "      <td>Learn To Fly</td>\n",
       "      <td>There Is Nothing Left To Lose</td>\n",
       "      <td>Foo Fighters</td>\n",
       "      <td>1999</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOFRQTD12A81C233C0</td>\n",
       "      <td>1</td>\n",
       "      <td>Sehr kosmisch</td>\n",
       "      <td>Musik von Harmonia</td>\n",
       "      <td>Harmonia</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOIZAZL12A6701C53B</td>\n",
       "      <td>5</td>\n",
       "      <td>I'll Be Missing You (Featuring Faith Evans &amp; 1...</td>\n",
       "      <td>No Way Out</td>\n",
       "      <td>Puff Daddy</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOKRIMP12A6D4F5DA3</td>\n",
       "      <td>5</td>\n",
       "      <td>I?'m A Steady Rollin? Man</td>\n",
       "      <td>Diggin' Deeper Volume 7</td>\n",
       "      <td>Robert Johnson</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        user                song  \\\n",
       "5   b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBXHDL12A81C204C0   \n",
       "7   b80344d063b5ccb3212f76538f3d9e43d87dca9e  SODACBL12A8C13C273   \n",
       "14  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOFRQTD12A81C233C0   \n",
       "19  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOIZAZL12A6701C53B   \n",
       "22  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOKRIMP12A6D4F5DA3   \n",
       "\n",
       "    listen_count                                              title  \\\n",
       "5              1                                           Stronger   \n",
       "7              1                                       Learn To Fly   \n",
       "14             1                                      Sehr kosmisch   \n",
       "19             5  I'll Be Missing You (Featuring Faith Evans & 1...   \n",
       "22             5                          I?'m A Steady Rollin? Man   \n",
       "\n",
       "                          release     artist_name  year  \n",
       "5                      Graduation      Kanye West  2007  \n",
       "7   There Is Nothing Left To Lose    Foo Fighters  1999  \n",
       "14             Musik von Harmonia        Harmonia     0  \n",
       "19                     No Way Out      Puff Daddy     0  \n",
       "22        Diggin' Deeper Volume 7  Robert Johnson     0  "
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "del (triplet_dataset_sub_song_merged_sub['song_id'])\n",
    "triplet_dataset_sub_song_merged_sub.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_data,test_data = train_test_split(triplet_dataset_sub_song_merged_sub,test_size = 0.4,random_state = 0)\n",
    "is_model = Recommenders.item_similarity_recommender_py()\n",
    "is_model.create(train_data,'user','title')\n",
    "user_id = list(train_data.user)[7]\n",
    "user_item = is_model.get_user_items(user_id)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "No. of unique songs for the user: 8\n",
      "no. of unique songs in the training set: 498\n",
      "Non zero values in cooccurence_matrix :3491\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>song</th>\n",
       "      <th>score</th>\n",
       "      <th>rank</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>Undo</td>\n",
       "      <td>0.102700</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>Revelry</td>\n",
       "      <td>0.085968</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>Invalid</td>\n",
       "      <td>0.077366</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>Gears</td>\n",
       "      <td>0.076563</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>Catch You Baby (Steve Pitron &amp; Max Sanna Radio...</td>\n",
       "      <td>0.068818</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>Sinisten tähtien alla</td>\n",
       "      <td>0.065155</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>Canada</td>\n",
       "      <td>0.063476</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>Sincerité Et Jalousie</td>\n",
       "      <td>0.062651</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>16 Candles</td>\n",
       "      <td>0.062547</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2b05b8168397ff62eaae7f4acab25d9feaaa07bd</td>\n",
       "      <td>Creil City</td>\n",
       "      <td>0.059842</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                    user_id  \\\n",
       "0  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "1  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "2  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "3  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "4  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "5  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "6  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "7  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "8  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "9  2b05b8168397ff62eaae7f4acab25d9feaaa07bd   \n",
       "\n",
       "                                                song     score rank  \n",
       "0                                               Undo  0.102700    1  \n",
       "1                                            Revelry  0.085968    2  \n",
       "2                                            Invalid  0.077366    3  \n",
       "3                                              Gears  0.076563    4  \n",
       "4  Catch You Baby (Steve Pitron & Max Sanna Radio...  0.068818    5  \n",
       "5                              Sinisten tähtien alla  0.065155    6  \n",
       "6                                             Canada  0.063476    7  \n",
       "7                              Sincerité Et Jalousie  0.062651    8  \n",
       "8                                         16 Candles  0.062547    9  \n",
       "9                                         Creil City  0.059842   10  "
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "is_model.recommend(user_id)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先计算歌曲被当前用户播放量 / 用户播放总量 当做分值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>title</th>\n",
       "      <th>song_id</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>year</th>\n",
       "      <th>total_listen_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAKIMP12A8C130995</td>\n",
       "      <td>1</td>\n",
       "      <td>The Cove</td>\n",
       "      <td>SOAKIMP12A8C130995</td>\n",
       "      <td>Thicker Than Water</td>\n",
       "      <td>Jack Johnson</td>\n",
       "      <td>0</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAPDEY12A81C210A9</td>\n",
       "      <td>1</td>\n",
       "      <td>Nothing from Nothing</td>\n",
       "      <td>SOAPDEY12A81C210A9</td>\n",
       "      <td>To Die For</td>\n",
       "      <td>Billy Preston</td>\n",
       "      <td>1974</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBBMDR12A8C13253B</td>\n",
       "      <td>2</td>\n",
       "      <td>Entre Dos Aguas</td>\n",
       "      <td>SOBBMDR12A8C13253B</td>\n",
       "      <td>Flamenco Para Niños</td>\n",
       "      <td>Paco De Lucia</td>\n",
       "      <td>1976</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBFNSP12AF72A0E22</td>\n",
       "      <td>1</td>\n",
       "      <td>Under Cold Blue Stars</td>\n",
       "      <td>SOBFNSP12AF72A0E22</td>\n",
       "      <td>Under Cold Blue Stars</td>\n",
       "      <td>Josh Rouse</td>\n",
       "      <td>2002</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBSUJE12A6D4F8CF5</td>\n",
       "      <td>2</td>\n",
       "      <td>12 segundos de oscuridad</td>\n",
       "      <td>SOBSUJE12A6D4F8CF5</td>\n",
       "      <td>10 + Downloaded</td>\n",
       "      <td>Jorge Drexler</td>\n",
       "      <td>2006</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  listen_count  \\\n",
       "0  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAKIMP12A8C130995             1   \n",
       "1  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAPDEY12A81C210A9             1   \n",
       "2  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBBMDR12A8C13253B             2   \n",
       "3  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBFNSP12AF72A0E22             1   \n",
       "4  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBSUJE12A6D4F8CF5             2   \n",
       "\n",
       "                      title             song_id                release  \\\n",
       "0                  The Cove  SOAKIMP12A8C130995     Thicker Than Water   \n",
       "1      Nothing from Nothing  SOAPDEY12A81C210A9             To Die For   \n",
       "2           Entre Dos Aguas  SOBBMDR12A8C13253B    Flamenco Para Niños   \n",
       "3     Under Cold Blue Stars  SOBFNSP12AF72A0E22  Under Cold Blue Stars   \n",
       "4  12 segundos de oscuridad  SOBSUJE12A6D4F8CF5        10 + Downloaded   \n",
       "\n",
       "     artist_name  year  total_listen_count  \n",
       "0   Jack Johnson     0                  94  \n",
       "1  Billy Preston  1974                  94  \n",
       "2  Paco De Lucia  1976                  94  \n",
       "3     Josh Rouse  2002                  94  \n",
       "4  Jorge Drexler  2006                  94  "
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song_merged_sum_df = triplet_dataset_sub_song_merged[['user','listen_count']].groupby('user').sum().reset_index()\n",
    "triplet_dataset_sub_song_merged_sum_df.rename(columns={'listen_count':'total_listen_count'},inplace=True)\n",
    "triplet_dataset_sub_song_merged = pd.merge(triplet_dataset_sub_song_merged,triplet_dataset_sub_song_merged_sum_df)\n",
    "triplet_dataset_sub_song_merged.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_sub_song_merged['fractional_play_count'] = triplet_dataset_sub_song_merged['listen_count']/triplet_dataset_sub_song_merged['total_listen_count']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>fractional_play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>274</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOADQPP12A67020C82</td>\n",
       "      <td>12</td>\n",
       "      <td>0.036697</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>275</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAFTRR12AF72A8D4D</td>\n",
       "      <td>1</td>\n",
       "      <td>0.003058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>276</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOANQFY12AB0183239</td>\n",
       "      <td>1</td>\n",
       "      <td>0.003058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>277</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAYATB12A6701FD50</td>\n",
       "      <td>1</td>\n",
       "      <td>0.003058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBOAFP12A8C131F36</td>\n",
       "      <td>7</td>\n",
       "      <td>0.021407</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                         user                song  \\\n",
       "274  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOADQPP12A67020C82   \n",
       "275  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAFTRR12AF72A8D4D   \n",
       "276  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOANQFY12AB0183239   \n",
       "277  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAYATB12A6701FD50   \n",
       "278  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBOAFP12A8C131F36   \n",
       "\n",
       "     listen_count  fractional_play_count  \n",
       "274            12               0.036697  \n",
       "275             1               0.003058  \n",
       "276             1               0.003058  \n",
       "277             1               0.003058  \n",
       "278             7               0.021407  "
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song_merged[triplet_dataset_sub_song_merged.user =='d6589314c0a9bcbca4fee0c93b14bc402363afea'][['user','song','listen_count','fractional_play_count']].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from scipy.sparse import coo_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "small_set = triplet_dataset_sub_song_merged\n",
    "user_codes = small_set.user.drop_duplicates().reset_index()\n",
    "song_codes = small_set.user.drop_duplicates().reset_index()\n",
    "user_codes.rename(columns = {'index':'user_index'},inplace = True)\n",
    "song_codes.rename(columns = {'index':'song_index'},inplace=True)\n",
    "user_codes['so_index_value'] = list(user_codes.index)\n",
    "song_codes['us_index_value'] = list(song_codes.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "small_set = pd.merge(small_set,user_codes,how = 'left')\n",
    "small_set = pd.merge(small_set,song_codes,how =  'left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>title</th>\n",
       "      <th>song_id</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>year</th>\n",
       "      <th>total_listen_count</th>\n",
       "      <th>fractional_play_count</th>\n",
       "      <th>user_index</th>\n",
       "      <th>so_index_value</th>\n",
       "      <th>song_index</th>\n",
       "      <th>us_index_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAKIMP12A8C130995</td>\n",
       "      <td>1</td>\n",
       "      <td>The Cove</td>\n",
       "      <td>SOAKIMP12A8C130995</td>\n",
       "      <td>Thicker Than Water</td>\n",
       "      <td>Jack Johnson</td>\n",
       "      <td>0</td>\n",
       "      <td>94</td>\n",
       "      <td>0.010638</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAPDEY12A81C210A9</td>\n",
       "      <td>1</td>\n",
       "      <td>Nothing from Nothing</td>\n",
       "      <td>SOAPDEY12A81C210A9</td>\n",
       "      <td>To Die For</td>\n",
       "      <td>Billy Preston</td>\n",
       "      <td>1974</td>\n",
       "      <td>94</td>\n",
       "      <td>0.010638</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBBMDR12A8C13253B</td>\n",
       "      <td>2</td>\n",
       "      <td>Entre Dos Aguas</td>\n",
       "      <td>SOBBMDR12A8C13253B</td>\n",
       "      <td>Flamenco Para Niños</td>\n",
       "      <td>Paco De Lucia</td>\n",
       "      <td>1976</td>\n",
       "      <td>94</td>\n",
       "      <td>0.021277</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBFNSP12AF72A0E22</td>\n",
       "      <td>1</td>\n",
       "      <td>Under Cold Blue Stars</td>\n",
       "      <td>SOBFNSP12AF72A0E22</td>\n",
       "      <td>Under Cold Blue Stars</td>\n",
       "      <td>Josh Rouse</td>\n",
       "      <td>2002</td>\n",
       "      <td>94</td>\n",
       "      <td>0.010638</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBSUJE12A6D4F8CF5</td>\n",
       "      <td>2</td>\n",
       "      <td>12 segundos de oscuridad</td>\n",
       "      <td>SOBSUJE12A6D4F8CF5</td>\n",
       "      <td>10 + Downloaded</td>\n",
       "      <td>Jorge Drexler</td>\n",
       "      <td>2006</td>\n",
       "      <td>94</td>\n",
       "      <td>0.021277</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  listen_count  \\\n",
       "0  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAKIMP12A8C130995             1   \n",
       "1  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAPDEY12A81C210A9             1   \n",
       "2  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBBMDR12A8C13253B             2   \n",
       "3  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBFNSP12AF72A0E22             1   \n",
       "4  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBSUJE12A6D4F8CF5             2   \n",
       "\n",
       "                      title             song_id                release  \\\n",
       "0                  The Cove  SOAKIMP12A8C130995     Thicker Than Water   \n",
       "1      Nothing from Nothing  SOAPDEY12A81C210A9             To Die For   \n",
       "2           Entre Dos Aguas  SOBBMDR12A8C13253B    Flamenco Para Niños   \n",
       "3     Under Cold Blue Stars  SOBFNSP12AF72A0E22  Under Cold Blue Stars   \n",
       "4  12 segundos de oscuridad  SOBSUJE12A6D4F8CF5        10 + Downloaded   \n",
       "\n",
       "     artist_name  year  total_listen_count  fractional_play_count  user_index  \\\n",
       "0   Jack Johnson     0                  94               0.010638           0   \n",
       "1  Billy Preston  1974                  94               0.010638           0   \n",
       "2  Paco De Lucia  1976                  94               0.021277           0   \n",
       "3     Josh Rouse  2002                  94               0.010638           0   \n",
       "4  Jorge Drexler  2006                  94               0.021277           0   \n",
       "\n",
       "   so_index_value  song_index  us_index_value  \n",
       "0               0           0               0  \n",
       "1               0           0               0  \n",
       "2               0           0               0  \n",
       "3               0           0               0  \n",
       "4               0           0               0  "
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "small_set.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "建立用户、歌曲和得分值的矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "mat_candidate = small_set[['us_index_value','so_index_value','fractional_play_count']]\n",
    "data_array = mat_candidate.fractional_play_count.values\n",
    "row_array = mat_candidate.us_index_value.values\n",
    "clo_array = mat_candidate.so_index_value.values\n",
    "\n",
    "data_sparse = coo_matrix((data_array,(row_array,clo_array)),dtype=float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9999, 9999)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_sparse.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<9999x9999 sparse matrix of type '<class 'numpy.float64'>'\n",
       "\twith 498109 stored elements in COOrdinate format>"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_sparse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_index</th>\n",
       "      <th>user</th>\n",
       "      <th>so_index_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_index                                      user  so_index_value\n",
       "0           0  b80344d063b5ccb3212f76538f3d9e43d87dca9e               0"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_codes[user_codes.user =='b80344d063b5ccb3212f76538f3d9e43d87dca9e']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import math as mt\n",
    "from scipy.sparse.linalg import *\n",
    "from scipy.sparse.linalg import svds\n",
    "from scipy.sparse import csc_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def compute_svd(urm,k):\n",
    "    U,s,Vt = svds(urm,k)\n",
    "    \n",
    "    dim = (len(s),len(s))\n",
    "    S = np.zeros(dim,dtype=np.float32)\n",
    "    for i in range(0,len(s)):\n",
    "        S[i,i] = mt.sqrt(s[i])\n",
    "    \n",
    "    U = csc_matrix(U,dtype=np.float32)\n",
    "    S = csc_matrix(S,dtype=np.float32)\n",
    "    Vt = csc_matrix(Vt,dtype=np.float32)\n",
    "    \n",
    "    return U,S,Vt\n",
    "\n",
    "def compute_estimate_matrix(urm,U,S,Vt,Utest,K,best):\n",
    "    rightItem = S*Vt\n",
    "    max_recommendation = 50\n",
    "    estimatedRatings = np.zeros(shape = (MAX_UID,MAX_PID),dtype=np.float16)\n",
    "    recommendRatings = np.zeros(shape=(MAX_UID,max_recommendation),dtype=np.float16)\n",
    "    for Usertest in Utest:\n",
    "        prob = U[Usertest,:]*rightItem\n",
    "        estimatedRatings[Usertest,:] = prob.todense()\n",
    "        recommendRatings[Usertest,:] = (-estimatedRatings[Usertest,:]).argsort()[:max_recommendation]\n",
    "    return recommendRatings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "k = 50\n",
    "urm = data_sparse\n",
    "\n",
    "MAX_UID = urm.shape[0]\n",
    "MAX_PID = urm.shape[1]\n",
    "\n",
    "U,S,Vt = compute_svd(urm,k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "Utest = [4,5,6,7]\n",
    "\n",
    "Utest_recommended_items = compute_estimate_matrix(urm,U,S,Vt,Utest,k,True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recommendation for user with user id 4\n",
      "The number 1 recommended song is Dirty Dishes BY Deer Tick\n",
      "The number 2 recommended song is Hallelujah (Album Version) BY Paramore\n",
      "The number 3 recommended song is Everyone Like Me BY Thousand Foot Krutch\n",
      "The number 4 recommended song is Bankrupt On Selling BY Modest Mouse\n",
      "The number 5 recommended song is Stay Awhile BY Dusty Springfield\n",
      "The number 6 recommended song is Walkin' On The Sun BY Smash Mouth\n",
      "The number 7 recommended song is Uptown Girl BY Me First And The Gimme Gimmes\n",
      "The number 8 recommended song is Criminal BY Gotan Project\n",
      "The number 9 recommended song is Mercedes Benz - Remix BY Janis Joplin Vs Medicine Head\n",
      "The number 10 recommended song is The Perfect Kiss BY New Order\n",
      "Recommendation for user with user id 5\n",
      "The number 1 recommended song is Halo BY The Pussycat Dolls\n",
      "The number 2 recommended song is The Baby Screams BY The Cure\n",
      "The number 3 recommended song is Hallelujah (Album Version) BY Paramore\n",
      "The number 4 recommended song is Seven Nation Army BY The White Stripes\n",
      "The number 5 recommended song is Hallelujah (Album Version) BY Paramore\n",
      "The number 6 recommended song is Slip Away BY Clarence Carter\n",
      "The number 7 recommended song is Mass Appeal (Explicit) BY Gang Starr\n",
      "The number 8 recommended song is The Perfect Kiss BY New Order\n",
      "The number 9 recommended song is A Message To You Rudy BY The Specials\n",
      "The number 10 recommended song is This Is A Forgery BY Dashboard Confessional\n",
      "Recommendation for user with user id 6\n",
      "The number 1 recommended song is Freedom Blade BY This Will Destroy You\n",
      "The number 2 recommended song is I Got Mine BY The Black Keys\n",
      "The number 3 recommended song is Victim Of The Crime BY Phoenix\n",
      "The number 4 recommended song is The Cynic BY Kashmir\n",
      "The number 5 recommended song is Talk Show Host BY Radiohead\n",
      "The number 6 recommended song is Adorable BY Artist Vs Poet\n",
      "The number 7 recommended song is Back Against The Wall BY Cage The Elephant\n",
      "The number 8 recommended song is Back Against The Wall BY Cage The Elephant\n",
      "The number 9 recommended song is Rome Wasn't Built In A Day BY Morcheeba\n",
      "The number 10 recommended song is Burn Clear BY Something Happens\n",
      "Recommendation for user with user id 7\n",
      "The number 1 recommended song is Back Against The Wall BY Cage The Elephant\n",
      "The number 2 recommended song is Legacy Of Kings BY HAMMERFALL\n",
      "The number 3 recommended song is With Arms Outstretched (Album Version) BY Rilo Kiley\n",
      "The number 4 recommended song is Harder Better Faster Stronger BY Daft Punk\n",
      "The number 5 recommended song is Uprising BY Muse\n",
      "The number 6 recommended song is Mass Appeal (Explicit) BY Gang Starr\n",
      "The number 7 recommended song is Tim McGraw BY Taylor Swift\n",
      "The number 8 recommended song is A Pain That I\u0019m Used To BY Depeche Mode\n",
      "The number 9 recommended song is Mercedes Benz - Remix BY Janis Joplin Vs Medicine Head\n",
      "The number 10 recommended song is This Life BY Obituary\n"
     ]
    }
   ],
   "source": [
    "for user in Utest:\n",
    "    print(\"Recommendation for user with user id {}\". format(user))\n",
    "    rank_value = 1\n",
    "    for i in Utest_recommended_items[user,0:10]:\n",
    "        song_details = small_set[small_set.so_index_value == i].drop_duplicates('so_index_value')[['title','artist_name']]\n",
    "        print(\"The number {} recommended song is {} BY {}\".format(rank_value, list(song_details['title'])[0],list(song_details['artist_name'])[0]))\n",
    "        rank_value+=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
